1. 繼承的關(guān)系
(1) protected保護在子類繼承后,只能子類自己使用;
2. 父類的構(gòu)造函數(shù)不能被繼承,在被繼承的時候,會自動對成員進行初始化;
(1) 子類中如果需要用到構(gòu)造函數(shù),需要自己定義;
(2) 默認情形下,父類的無參構(gòu)造函數(shù)會被調(diào)用;
(3) 如果需要調(diào)用父類有參數(shù)的構(gòu)造函數(shù),需要在類中定義;
(4) 構(gòu)造函數(shù)在生成的時候,會優(yōu)先調(diào)用父類,析構(gòu)的時候會最后析構(gòu)父類;
3. 多重繼承
(1) 定義:一個類有多個父類關(guān)系;
(2) 菱形繼承:命令沖突;
(3) 虛基類:在類前面加上visual關(guān)鍵字,這樣在繼承的時候才會只繼承一份;
(4) 多態(tài):通過在父類中定義一個指針,指向子類,
(5) 虛函數(shù):在函數(shù)前面機上virtual關(guān)鍵字,定義子類對象的時候,
4. 多態(tài)構(gòu)成的條件:
(1) 必須存在繼承關(guān)系;
(2) 繼承關(guān)系父類和子類必須存在同名的虛函數(shù);
(3) 必須存在父類的指針,通過指針來調(diào)用虛函數(shù);
/*系統(tǒng)根據(jù)具體的對象不同調(diào)用不同的函數(shù)*/
5. 覆蓋,重載以及隱藏
(1) 重寫條件:父類子類函數(shù)名相同,返回值相同,有virtual關(guān)鍵字;
(2) 重載:函數(shù)名相同但是參數(shù)不同;
(3) 隱藏:子類的函數(shù)會屏蔽父類的同名函數(shù),不需要關(guān)心virtual關(guān)鍵字;
/*思考:隱藏是否會占據(jù)空間 ? */
6. C++的編譯過程
(1) 聯(lián)編:
① 靜態(tài)聯(lián)編:
② 動態(tài)聯(lián)編:
7. 抽象類:
(1) 純虛函數(shù):沒有函數(shù)體,只有函數(shù)申明,在函數(shù)最后加上= 0;
(2) 抽象類:含有純虛函數(shù)的類
① 抽象類不能創(chuàng)造類型,只能繼承對象;
8. 虛析構(gòu)函數(shù)
(1) 構(gòu)造函數(shù)無法被申明為虛函數(shù),因為類在初始化的時候,才會被分配地址;
(2)
9. 理解A *p = new B,其中B是A的子類,p->C,其中,C為函數(shù)
(1) 當C為virtual函數(shù)時,p指針指向B的空間,當C不為virtual函數(shù),P指針指向A的空間;
(2) 子函數(shù)在調(diào)用delete的時候,會默認調(diào)用子類的析構(gòu)函數(shù)和父類的析構(gòu)函數(shù);