宏定義函數
省略參數類型 ()裏是返回值
#define EXTERN16BYTE(x) ((x + 15) / 16 * 16)
#define isLeap(n) (n%400==0||(n%4==0&&n%100!=0)?1:0)
public\private\protected
1.private成員只能被本類成員(類內)和友元訪問,不能被派生類訪問;
2.protected成員可以被派生類訪問。
public可被類外訪問。
繼承
派生類繼承方式
public繼承:父類成員在子類中保持原有訪問級別
private繼承:父類成員在子類中變爲private成員
protected繼承:父類中public成員會變成protected
父類中protected成員仍然爲protected
父類中private成員仍然爲private
類型兼容性原則
派生類可以被當作基類使用 子類就是特殊的父類
子類對象可以當作父類對象使用
子類對象可以直接賦值給父類對象
子類對象可以直接初始化父類對象
父類指針可以直接指向子類對象
父類引用可以直接引用子類對象
繼承中的構造析構調用原則
構造時 父類->子類 析構時相反
組合
組合:類中有類,強調has a
先構造父類,再構造成員變量、最後構造自己
派生類中有同名成員/函數
1.直接調用訪問的是子類成員/函數
2.子類可以通過添加作用域來訪問父類中的同名成員成員/函數
s1.father::fun(110);
派生類中訪問static
基類定義的靜態成員,將被所有派生類共享
類名 :: 成員
虛繼承
如果在多條繼承路徑上有一個公共的基類,那麼在繼承路徑的某處匯合點,這個公共基類就會在派生類的對象中產生多個基類子對象
要使這個公共基類在派生類中只產生一個子對象,必須對這個基類
聲明爲虛繼承,使這個基類成爲虛基類。
class B1:public virtual A;
虛函數&&純虛函數&&抽象類
虛函數
C++中的虛函數的作用主要是實現了多態的機制。第一層是在基類中用virtual關鍵字聲明的,第二層是要在多個派生類中被重新定義。
虛函數允許函數調用與函數體之間的聯繫在運行時才建立
構造函數不可以是虛函數
而析構函數可以是虛函數
純虛函數
虛函數=0 在基類中無定義
抽象類
擁有純虛函數的類叫作抽象類,無法實例化。
delete 和 delete[]的區別
- 對於基本數據類型來說,相同
- 對於自定義的數據類型來說,delete 僅回收該指針指向的內存
delete[]回收指向數組的所有內存