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

