C++基礎簡單總結

hwaityd發表於2024-10-20

C語言和C++是兩種密切相關但又有明顯區別的程式語言。C++是在C語言的基礎上發展起來的,它不僅完全相容C語言,還增加了物件導向程式設計、泛型程式設計等特性。

  1. C語言與C++的區別

    • C語言是一種程序式程式設計語言,而C++是支援多正規化程式設計的語言,包括程序式程式設計、物件導向程式設計和泛型程式設計。
    • C++支援類和物件,提供了封裝、繼承和多型等物件導向的特性。
    • C++支援模板,允許泛型程式設計。
    • C++支援異常處理。
    • C++支援新的資料型別,如bool、wchar_t等。
  2. 程序導向與物件導向的區別

    • 程序導向強調的是函式和過程,程式由一系列函式呼叫組成。
    • 物件導向強調的是物件和訊息,程式由物件的互動組成。
    • 物件導向提供了更好的程式碼複用性和模組化。
  3. C++新語法(儲存結構)

    • 引用:引用是某個已存在變數的另一個名字,它本身不佔用記憶體空間。
    • 特點:引用必須在定義時被初始化,一旦初始化後不能改變其指向。
  4. 右值引用(C++11特性)

    • 右值引用允許程式設計師直接操作即將銷燬的物件的資源,常用於移動語義和完美轉發。
  5. 引用與指標的區別

    • 引用是某個變數的別名,一旦初始化後不能改變其指向。
    • 指標是一個變數,儲存了另一個變數的地址,可以改變其指向。
  6. 引用陣列

    • 陣列的引用實質上是一個指向陣列首元素的指標。
  7. bool型別

    • bool是C++中新增的資料型別,用於表示布林值true和false。

語法規則

  1. 命名規則:識別符號只能包含字母、數字和下劃線,且不能以數字開頭。
  2. 作用域
    • 函式原型作用域:函式原型中定義的變數僅在該函式原型中可見。
    • 區域性作用域:在函式內部定義的變數僅在該函式內部可見。
    • 類作用域:在類中定義的成員僅在該類內部可見。
    • 名稱空間作用域:在名稱空間中定義的名稱僅在該名稱空間中可見。
  3. 作用域與可見性問題:作用域決定了變數的可見性和生命週期。
  4. 關鍵字使用
    • extern:用於宣告全域性變數或函式,可以被多個檔案共享。
    • static:用於宣告區域性靜態變數或靜態成員變數,其生命週期貫穿整個程式。

過載

  1. 過載:函式名相同,但引數列表不同。
  2. 重寫:派生類中重寫基類的虛擬函式。
  3. 友元:友元函式或友元類可以訪問類的私有和保護成員。
  4. 函式過載:在同一個作用域內,函式名相同但引數列表不同。
  5. 二義性問題:當函式呼叫不明確時,編譯器無法確定呼叫哪個函式。
  6. 運算子過載
    • 友元運算子過載:作為類的友元函式過載運算子。
    • 成員函式運算子過載:作為類的成員函式過載運算子。
  7. 不可過載的運算子:如.::.*?:等。

函式預設引數

  1. 語法:在函式定義時為引數指定預設值。
  2. 特性:簡化函式呼叫。
  3. 二義性問題:當函式呼叫可以匹配多個過載版本時,會產生二義性。

行內函數

  1. 宣告形式:使用inline關鍵字宣告。
  2. 工作原理:在編譯時將函式體插入到每個呼叫點,減少函式呼叫的開銷。
  3. 遞迴:行內函數通常不用於遞迴,因為遞迴會增加程式碼體積。

物件導向

  1. 封裝:將資料和運算元據的函式組合在一起,隱藏內部實現細節。
  2. 繼承:允許新類(派生類)繼承現有類(基類)的特性。
  3. 多型:允許不同類的物件對同一訊息做出響應。

封裝

  1. 類與物件:類是物件的藍圖,物件是類的例項。
  2. 類的語法體系:定義瞭如何宣告類、成員變數和成員函式。
  3. 抽象的過程:將複雜性隱藏在介面後面。
  4. 封裝過程:透過訪問修飾符(public、private、protected)控制對類成員的訪問。
  5. 訪問許可權:控制成員的可見性和訪問性。

封裝::語法::函式

  1. 建構函式:初始化物件的特殊函式。
  2. 複製構造
    • 使用場景:當需要透過一個物件來初始化另一個物件時。
    • 深複製:逐個複製物件的每個成員。
    • 淺複製:僅複製物件的指標或引用。
  3. 解構函式:清理物件使用的資源。

物件

  1. 物件的大小:取決於物件中成員變數的大小和對齊。
  2. 空類物件大小:通常為1位元組,以確保不同的類型別。
  3. 無名物件:通常用於臨時物件,不佔用額外記憶體。

類::成員

  1. 靜態(static)成員:被同類所有物件共享。
  2. 靜態成員的生命週期:從程式開始到程式結束。
  3. 靜態成員的呼叫規則:透過類名直接訪問。
  4. 常成員:只讀成員。
  5. 常資料成員:通常與初始化列表一起使用。
  6. 初始化引數列表:在建構函式中初始化成員變數。
  7. 常函式成員:使用const修飾的成員函式。
  8. this指標:指向當前物件的指標。

類的組合

  1. 類的組合:一個類包含另一個類的物件。
  2. 建構函式的呼叫順序:先呼叫成員物件的建構函式,再呼叫包含類的建構函式。

模板

  1. 函式模板:允許編寫與資料型別無關的函式。
  2. 類别範本:允許編寫與資料型別無關的類。
  3. 非型別模板:模板引數可以是非型別引數。
  4. 標準模板庫STL:提供了一套通用的模板類和函式。

標準模板庫

  1. 六大元件:容器、迭代器、演算法、仿函式、介面卡、空間配置器。
  2. 容器及使用:如vectorlistmap等。
  3. 迭代器:提供了一種訪問容器中元素的方法。
  4. 空間配置器及其使用:管理容器的記憶體分配。
  5. 演算法:如排序、搜尋等。
  6. 仿函式:允許函式作為引數傳遞。
  7. 介面卡:如迭代器介面卡、函式介面卡等。

容器

  1. 序列式容器
    • vector:動態陣列,儲存連續的元素。
    • deque:雙端佇列,可以高效地在兩端插入和刪除。
    • list:雙向連結串列,可以高效地在任意位置插入和刪除。
  2. 關聯式容器
    • set:有序集合,不允許重複。
    • multiset:無序集合,允許重複。
    • map:鍵值對集合,鍵唯一。
    • multimap:鍵值對集合,鍵可以重複。

繼承

  1. 什麼是繼承:一種建立新類的方式,新類繼承現有類的屬性和方法。
  2. 繼承的特性:傳遞性、不對稱性。
  3. 繼承的分類:單繼承、多繼承。
  4. 基類成員呼叫的函式的二義性問題:當派生類和基類有同名函式時。
  5. 菱形繼承:一個類繼承了兩個有共同基類的類。
  6. 解決菱形繼承:使用虛繼承。
  7. 不可被繼承:建構函式、複製建構函式、解構函式、友元、靜態成員。
  8. 繼承方式:public、private、protected。
  9. 繼承後的訪問許可權:繼承方式決定了成員在派生類中的訪問許可權。
  10. 繼承的構造、析構順序:先呼叫基類的建構函式,後呼叫派生類的建構函式;析構順序相反。
  11. 繼承與組合類:建構函式的順序。
  12. 模板的繼承:模板類可以被繼承。
  13. 基類的靜態成員被繼承的特性:不可被繼承,但可以被派生類物件共享。
  14. 型別相容性原則:派生類物件可以被當作基類

相關文章