C++學習筆記

1. 數(shù)據(jù)類型

1.1 內(nèi)置類型

bool、char、int、float、double、void、wchar_t

  • void:無類型
  • wchar_t:寬字符型,空間是和short int一樣

1.2 類型修飾符

signed、unsigned、short、long

1.3 類型別名

typedef type newname;

1.4 類型轉(zhuǎn)換

  • 靜態(tài)轉(zhuǎn)換(Static Cast):相似對象之間的轉(zhuǎn)換,如:int轉(zhuǎn)float。不進行運行時類型檢查,可能會導致運行時錯誤。
  • 動態(tài)轉(zhuǎn)換(Dynamic Cast):基類或派生類指針或引用。運行時進行檢查,錯誤時返回空指針或拋異常。
  • 重新解釋轉(zhuǎn)換(Reinterpret Cast):將任意指針轉(zhuǎn)換到其他指針類型,也允許任意整數(shù)類型和任意指針類型之間的轉(zhuǎn)換。
  • 常量轉(zhuǎn)換(Const Cast):將const類型對象轉(zhuǎn)換為非const類型對象。

2. 變量類型

除內(nèi)置數(shù)據(jù)類型,c++允許其它類型變量,如:枚舉、指針、數(shù)組、引用、數(shù)據(jù)結(jié)構(gòu)、類等。

3. 常量定義

  • 使用#define預處理器
#define identifier value
  • 使用const關(guān)鍵字
const type variable = value;

4. 類型限定符

  • const:定義常量,值不能被修改
  • volatile:變量的值可能會被程序以外的因素改變,如:硬件、其它線程
  • restrict:修飾的指針是唯一一種訪問它所指向?qū)ο蟮姆绞?/li>

5. 存儲類

  • auto:根據(jù)初始化表達式自動推斷該變量的類型
  • register:定義寄存器變量,表示該變量被頻繁使用,可以存儲在CPU的寄存器中,非RAM,以提高程序運行效率,不能對它應用一元的 '&' 運算符(因為它沒有內(nèi)存位置)
  • static:靜態(tài)變量
  • extern:提供一個全局變量的引用,全局變量對所有的程序文件都是可見的
  • mutable:該類中的成員變量可以在const成員函數(shù)中被修改

6. 雜項運算符:

  • sizeof:返回變量大小
  • Condition ? x : y:三目運算符,如:sizeof(a) 將返回 4,其中 a 是整數(shù)
  • , :順序執(zhí)行一系列運算,整個逗號表達式的值是以逗號分隔的列表中的最后一個表達式的值
  • .->:訪問類、結(jié)構(gòu)體的成員
  • Cast:把一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型,如:int(2.2000) 將返回 2
  • &:返回變量的地址,如:&a; 將給出變量的實際地址
  • 指針: 指向一個變量,如:*var; 將指向變量 var

7. 循環(huán)

  • while:條件為真,執(zhí)行循環(huán)
  • for:多次執(zhí)行一個語句序列
  • do…while:條件為真,執(zhí)行循環(huán)(循環(huán)至少執(zhí)行一次)

8. 判斷

  • if…else…
  • switch…case…

9. 函數(shù)參數(shù)

  • 傳值調(diào)用:把參數(shù)的實際值賦給形式參數(shù),修改形式參數(shù)對實際參數(shù)沒有影響
void swap(int x, int y){
  int temp;
  temp = x; /* 保存 x 的值 */
  x = y; /* 把 y 賦值給 x */
  y = temp; /* 把 x 賦值給 y */
  return;
}
  • 指針調(diào)用:把參數(shù)的地址賦值給形式參數(shù),修改形式參數(shù)會影響實際參數(shù)
void swap(int *x, int *y){
  int temp;
  temp = *x;    /* 保存地址 x 的值 */
  *x = *y;        /* 把 y 賦值給 x */
  *y = temp;    /* 把 x 賦值給 y */
  return;
}
  • 引用調(diào)用:把參數(shù)的引用賦值給形式參數(shù),修改形式參數(shù)會影響實際參數(shù)
void swap(int &x, int &y){
  int temp;
  temp = x; /* 保存地址 x 的值 */
  x = y; /* 把 y 賦值給 x */
  y = temp; /* 把 x 賦值給 y */
  return;
}

10. 指針

10.1 操作符

  • &:訪問當前變量的地址

  • *:返回位于操作數(shù)所指定地址的變量的值

10.2 詳解

  • NULL指針:NULL 指針是一個定義在標準庫中的值為零的常量
int  *ptr = NULL;
  • 指針的算數(shù)運算:可以對指針進行四種算術(shù)運算:++、--、+、-
int var[MAX] = {1, 2, 3};
int *ptr;
ptr = var; // 指針中的數(shù)組地址
ptr++; // 移動到下一個位置
  • 指針vs數(shù)組
int var[3] = {1, 2, 3};
for (int i = 0; i < 3; i++) {
  *var = i; // 正確語法
  // var++; // 錯誤語法
  *(var + i) = 10; // 賦值,有效語句
}
  • 指針數(shù)組:用來存儲指針的數(shù)組
int main (){
  int var[3] = {10, 100, 200};
  // **ptr** 為一個數(shù)組,由3個整數(shù)指針組成。因此,ptr 中的每個元素,都是一個指向 int 值的指針
  int *ptr[3];
  for (int i = 0; i < MAX; i++){
  ptr[i] = &var[i]; // 賦值為整數(shù)的地址
  }
  for (int i = 0; i < MAX; i++){
  cout << "Value of var[" << i << "] = ";
  cout << *ptr[i] << endl;
  }
  return 0;
}
  • 指向指針的指針:一種多級間接尋址的形式,或者說是一個指針鏈,將指針的地址存放在另一個指針里面
int **var;
  • 傳遞指針給函數(shù):引用或地址傳遞參數(shù),使傳遞的參數(shù)在調(diào)用函數(shù)中被改變
  • 從函數(shù)返回指針:返回指針到局部變量、靜態(tài)變量和動態(tài)內(nèi)存分配。注意:不支持在函數(shù)外返回局部變量的地址,除非定義局部變量為 static變量

11. 引用

11.1 定義

  • 是某個已存在變量的另一個名字
  • 一旦把引用初始化為某個變量,就可以使用該引用名稱或變量名稱來指向變量
// r 是一個初始化為 i 的整型引用
int i = 17; int& r = i;

11.2 指針vs引用

  • 不存在空引用。引用必須連接到一塊合法的內(nèi)存
  • 一旦引用被初始化為一個對象,就不能被指向到另一個對象。指針可以在任何時候指向到另一個對象。
  • 引用必須在創(chuàng)建時被初始化。指針可以在任何時間被初始化。

11.3 使用

  • 引用作為參數(shù)
void swap(int& x, int& y);
  • 引用作為返回值:返回一個對局部變量的引用是不合法的,可以返回一個對靜態(tài)變量的引用
int& func() {
  int q;
  // return q; // 在編譯時發(fā)生錯誤
  static int x;
  return x;  // 安全,x 在函數(shù)作用域外依然是有效的
}

12. 結(jié)構(gòu)體

struct TypeName {
  type1 name1;
  type2 name2;
   …  …
  }object_names;

13. 類

13.1 訪問修飾符

  • public:成員在程序中類的外部是可訪問的
  • private:成員變量或函數(shù)在類的外部是不可訪問的
  • protected:與私有成員十分相似,但是成員在派生類(即子類)中是可訪問的

13.2 繼承

  • 支持多繼承

13.3 重載

  • 重載函數(shù):相同方法名,參數(shù)和實現(xiàn)不同
  • 重載運算符:重定義或重載大部分 C++ 內(nèi)置的運算符,operator為關(guān)鍵字
Box operator+(const Box&);

13.4 多態(tài)

  • 繼承中,多個子類的不同實現(xiàn)

13.5 虛函數(shù)

  1. 在基類中使用關(guān)鍵字virtual聲明的函數(shù)
  2. 在派生類中重新定義基類中定義的虛函數(shù)時,會告訴編譯器不要靜態(tài)鏈接到該函數(shù);在程序中任意點可以根據(jù)所調(diào)用的對象類型來選擇調(diào)用的函數(shù),這種操作被稱為動態(tài)鏈接,或后期綁定
  • 純虛函數(shù):在基類中定義虛函數(shù),以便在派生類中重新定義該函數(shù)更好地適用于對象,但是在基類中又不能對虛函數(shù)給出有意義的實現(xiàn)
// = 0 告訴編譯器,函數(shù)沒有主體,是純虛函數(shù)
virtual int area() = 0;
  • 接口/抽象類
    • 為了給其他類提供一個可以繼承的適當?shù)幕悺3橄箢惒荒鼙挥糜趯嵗瘜ο?,它只能作為接口使?/li>
    • 如果試圖實例化一個抽象類的對象,會導致編譯錯誤
    • 如果一個 ABC 的子類需要被實例化,則必須實現(xiàn)每個純虛函數(shù)

14. 異常處理

  • throw: 當問題出現(xiàn)時,程序會拋出一個異常
  • catch: 在您想要處理問題的地方,通過異常處理程序捕獲異常
  • try:try 塊中的代碼標識將被激活的特定異常。它后面通常跟著一個或多個 catch 塊

15. 命名空間

  • namespace
namespace name { code }
name:: code

namespace name_1 {
  namespace name_2 { code }
}
  • using
using namespace name;
using name:: code;
using namespace name_1:: name_2

16. 模板

  • 函數(shù)模板/泛型
template <typename type> ret-type func-name(parameter list) {
  // 函數(shù)的主體
}
template <typename T>
inline T const& Max (T const& a, T const& b) { 
return a < b ? b:a; 
}
  • 類模板
template <class type> class class-name { }
template <class T>
class Stack { 
  private: 
    vector<T> elems;  // 元素 
  public: 
    void push(T const&); // 入棧
    void pop();  // 出棧
    T top() const; // 返回棧頂元素
    bool empty() const{  // 如果為空則返回真。
      return elems.empty(); 
  } 
}; 

[注]:C++關(guān)鍵字查閱:https://www.runoob.com/w3cnote/cpp-keyword-intro.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • C++筆記 明年就要找工作了,只有Python用的比較熟好像不太行,抓緊熟悉一遍C++開始刷題吧!這里會不斷更新C...
    MapleUMR閱讀 733評論 0 0
  • 第一天 一.內(nèi)聯(lián)函數(shù)(inline) 函數(shù)調(diào)用的時候需要建立棧內(nèi)存環(huán)境,進行參數(shù)傳遞,并產(chǎn)生程序執(zhí)行轉(zhuǎn)移,這些工作...
    陳果123閱讀 1,223評論 0 1
  • 第一章 計算機與C++編程簡介 C++程序6個階段編程 ->預處理->編譯->連接->裝入->執(zhí)行1.程序在編譯器...
    rogertan30閱讀 4,513評論 0 1
  • 1. 引用 1.1 左值引用 我們通常提到的引用都是指“左值引用”, 其語法如下:<類型名> & <變量名> = ...
    Angeladoudou閱讀 601評論 0 0
  • 初識C++ C++標準格式 變量 作用:給一段指定的內(nèi)存空間起名,方便操作這段內(nèi)存。語法:數(shù)據(jù)類型 變量名 = ...
    home2_d685閱讀 258評論 0 0

友情鏈接更多精彩內(nèi)容