- 1. 引用:
- 引用作爲別名時,聲明時就必須初始化
- 常用作函數得形參,使用引用即使用源數據,而不是其副本=\
- 傳遞類對象參數得標準方式一般是按引用傳遞
- 指針是變量,可重新賦值,但引用不行
- 使用時必須初始化,且不能再指向其他變量
-
2. 內聯函數
-
3. 默認參數的函數
-
函數中某個參數設置了默認值,則它右邊的參數也都要有默認值
-
4. 函數重載
-
5.
extern "C
主要用於能夠正確實現 C++ 調用其他 C 語言代碼,加上 **extern "C"
**之後,會指示編譯器這部分代碼按照 C 語言的進行編譯,而不是 C++ 的。 -
6. 函數模板和類模板
-
7. 構造函數
-
構造函數的名稱和類名相同,通過函數重載,可以創建多個同名的構造函數。
-
構造函數沒有聲明類型。初始化與構造函數的參數列表相匹配。
-
如果不實現構造函數,編譯器會生成一個默認構造函數;如果自己實現,則編譯器不會生成。
-
8. 析構函數
-
系統默認的析構函數:如果構造函數沒有使用 new,只需編譯器生成一個什麼都不用做的析構函數即可。
-
如果構造函數使用 new 來分配內存,則必須使用 delete 提供的析構函數釋放這些內存。
-
static 數據成員和成員函數
-
static 修飾類中成員,表示類的共享數據
-
static 成員變量不佔用對象的內存,而是在所有對象之外開闢內存,即使不創建對象也可以訪問。
-
使用 static 成員變量必須在類外進行初始化。
-
用 static 修飾的成員變量在對象中是不佔內存的,因爲他不是跟對象一起在堆或者棧中生成,用 static 修飾的變量在靜態存儲區生成的。
-
由於 static 修飾的類成員屬於類,不屬於對象,因此 static 類成員函數是沒有 this 指針的(this 指針是指向本對象的指針)。正因爲沒有 this 指針,所以 static 類成員函數不能訪問非 static 的類成員,只能訪問 static 修飾的靜態類成員。
-
普通成員函數可以通過對象名進行調用,而 static 成員函數必須通過類名進行調用(因爲它與類關聯)。
-
9. 動態內存分配
-
new/delete是運算符(關鍵字),malloc/free是函數調用。
-
10. 拷貝構造函數
-
調用拷貝構造函數的時機:
-
1.定義一個新對象並用一個同類型的對象進行初始化時
-
2.對象作爲實參或函數返回對象時
-
定義一個拷貝構造函數的固定形式:
Student(const Student& s);
-
11. 淺拷貝和深拷貝
-
如果不定義拷貝構造函數,則編譯器會使用默認拷貝構造函數,是淺拷貝
-
淺拷貝遇到含有指針的對象類型時很容易出問題,因爲淺拷貝出來的對象和原對象的指針都指向同一個內存空間,當其中一個對象被析構後,另一個對象再使用時就會發生內存溢出。
-
深拷貝遇到指針時,會重新分配一塊空間,因此不會有問題。
-
12. 什麼時候需要定義拷貝構造函數
-
1.類數據成員有指針
-
2.類數據成員管理資源(如打開一個文件)
-
3.一個類需要析構函數釋放資源時,那它也需要一個拷貝構造函數
-
const 關鍵字
-
初始化 const 成員變量的唯一方法是使用初始化列表(不能在構造函數的函數體中初始化)。
-
const 成員函數可以使用類中的所有成員變量,但是不能修改它們的值, 這種措施主要還是爲了保護數據而設置的。const 成員函數也稱爲常成員函數。
-
常成員函數需要在聲明和定義的時候在函數頭部的結尾加上 const 關鍵字
-
在 C++ 中,const 也可以用來修飾對象,稱爲常對象。一旦將對象定義爲常對象之後,就只能調用類的 const 成員(包括 const 成員變量和 const 成員函數)了。
-
13. 運算符重載
-
運算符重載可以選擇使用成員函數或非成員函數來實現。
-
非成員函數應是友元函數,這樣纔可以直接訪問類的私有數據。
-
運算符重載的限制
-
1、爲防止用戶爲標準類型重載運算符,重載後的運算符必須至少有一個是用戶自 定義類型的數據。
-
2、不能違反運算符原有的運算規則。
-
3、不能重載不存在的運算符,即不能創建新的運算符
-
4、以下運算符不可重載:
sizeof :sizeof運算符 . :成員運算符 .* :成員指針運算符 :: : 域解析運算符 ? : 條件運算符 typid : RTTI運算符 const_cast、dynamic_cast、reinterpret_cast、static_cast :強制類型轉換
-
5、只能用作成員函數重載的運算符:
= :賦值運算符 () :函數調用運算符 [] :下標(索引)運算符 -> :通過指針訪問類成員的運算
-
C++ 的運算符重載可以作爲成員函數重載,也可以作爲非成員函數(友元)重載,兩者之間最重要的區別在於重載函數的參數列表的不同,作爲成員函數重載的時候會隱式的傳遞 this 指針,而作爲非成員函數進行重載的時候需要顯式傳遞。+ C++ 中 ++、-- 運算符的重載式很特別的存在,它們有獨特的格式,分爲前自增(自減)和後自增(自減)。爲了編譯器能夠進行區分,引入了一個額外的 int 進行區分,但這個 int 不含有實際意義
-
13. 類之間的關係
-
is-a 繼承體現
-
has-a 組合體現
-
繼承的意義
-
代碼重用
-
體現不同抽象層次
-
公有繼承:`class Teacher: public Person
-
子類只能訪問父類的public和protected成員,不能訪問private成員。
-
在構造一個子類時,父類部分由父類的構造函數完成,子類的部分由子類的構造函數完成。
-
構造一個子類時,先構造父類,然後構造子類,析構時相反。`
-
多態:同樣的方法調用而執行不同操作、運行不同代碼。
-
14. 虛函數與抽象類