C++繼承這(zhe)樣學,讓你快(kuai)速(su)掌握(wo)
時間:2018-08-28 來(lai)源(yuan):未知(zhi)
1. 繼承的關系(xi)
(1) protected保(bao)護在(zai)子類繼(ji)承后,只能(neng)子類自(zi)己(ji)使(shi)用;
2. 父類的構造函數不(bu)能被繼(ji)承(cheng),在被繼(ji)承(cheng)的時候,會自動對成員進(jin)行(xing)初始化(hua);
(1) 子(zi)類中如果需要(yao)用到構造函數,需要(yao)自己定義;
(2) 默認情形下,父類的無參構(gou)造函數會被調用;
(3) 如果需要調用(yong)父類(lei)有參數的構造函數,需要在(zai)類(lei)中定義;
(4) 構(gou)造函數在生成的時候(hou),會優先調用(yong)父類,析(xi)構(gou)的時候(hou)會最后析(xi)構(gou)父類;
3. 多重繼承
(1) 定(ding)義:一(yi)個類有多個父類關系;
(2) 菱形繼承:命令沖突;
(3) 虛(xu)基類:在類前面加上visual關鍵字(zi),這樣在繼承的時候才(cai)會只繼承一(yi)份;
(4) 多態:通過在父類中定義(yi)一個指(zhi)針(zhen),指(zhi)向子類,
(5) 虛函(han)數:在(zai)函(han)數前面機(ji)上virtual關鍵字(zi),定義子類(lei)對象的時候,
4. 多(duo)態(tai)構成的(de)條件(jian):
(1) 必(bi)須存(cun)在繼(ji)承關系;
(2) 繼承(cheng)關系父類(lei)和(he)子類(lei)必須存在(zai)同名的虛函數(shu);
(3) 必須(xu)存(cun)在父類的指(zhi)針(zhen)(zhen),通過指(zhi)針(zhen)(zhen)來調用虛函(han)數;
/*系(xi)統根據(ju)具體的(de)對象(xiang)不(bu)同調用不(bu)同的(de)函數(shu)*/
5. 覆(fu)蓋,重載以及(ji)隱藏
(1) 重寫條(tiao)件(jian):父(fu)類子類函數名(ming)相(xiang)同(tong),返回值(zhi)相(xiang)同(tong),有virtual關鍵(jian)字;
(2) 重載(zai):函數名相同但是參數不同;
(3) 隱藏(zang):子類的函(han)數(shu)會(hui)屏蔽父類的同名函(han)數(shu),不(bu)需要(yao)關(guan)心virtual關(guan)鍵字;
/*思考(kao):隱藏是否會占據(ju)空間 ? */
6. C++的編譯過程
(1) 聯編(bian):
① 靜態聯編:
② 動態(tai)聯(lian)編:
7. 抽象類:
(1) 純(chun)虛函數(shu):沒(mei)有(you)函數(shu)體(ti),只有(you)函數(shu)申明,在(zai)函數(shu)最后加(jia)上= 0;
(2) 抽(chou)象類:含有純虛函(han)數的類
① 抽象類不能(neng)創造類型,只能(neng)繼承(cheng)對象;
8. 虛析構函數
(1) 構造(zao)函數無法被申明(ming)為虛(xu)函數,因(yin)為類在初始化的時候,才會被分(fen)配地址(zhi);
(2)
9. 理(li)解A *p = new B,其中B是A的子類,p->C,其中,C為函數
(1) 當C為(wei)virtual函數(shu)時(shi),p指(zhi)(zhi)針指(zhi)(zhi)向B的空(kong)間(jian),當C不為(wei)virtual函數(shu),P指(zhi)(zhi)針指(zhi)(zhi)向A的空(kong)間(jian);
(2) 子(zi)(zi)函(han)(han)數(shu)在調用delete的(de)時候(hou),會默認調用子(zi)(zi)類的(de)析構函(han)(han)數(shu)和父類的(de)析構函(han)(han)數(shu);