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