繼承與多態
繼承的本質:代碼的複用
1)派生類的內存佈局,都繼承了基類的什麼。
2)繼承來的東西的訪問限定:
3)派生類對象的構造順序
4)派生類和基類同名成員方法的關係:
重載:作用域相同,函數名相同,參數列表不同的函數。
隱藏:繼承結構中,派生類隱藏了與基類同名的函數。(隱藏基類,優先調用自己的)
覆蓋:基類有與派生類同名的函數,返回值相同,參數列表相同。並且基類的函數爲虛函數。則基類的虛函數會覆蓋派生類的函數。
5)基類對象和派生類對象能否互相賦值和引用
Base b; Derive d;
基類對象---》派生類對象 例:d=b; //error 因爲派生類對象包含基類成員和派生類成員。會造成派生類的成員部分沒有賦值
派生類對象---》基類對象 例:b=d; //正確 因爲派生類對象包含了基類成員的那部分,則可以賦值。 (編譯器默認的支持自下向上的轉換)
基類對象的指針/引用----》派生類對象 例:Base *pa=&d; //正確 但是指針接引用不能訪問派生類的成員。因爲指針的類型爲Base*
派生類對象的指針/引用----》基類對象 例:Derive *pb=&b;//error
6)虛函數和多態
7)什麼情況下產生多態的調用:使用指針和引用指向不同於該指針類型的對象的時候。
8)純虛函數和抽象類
抽象類:擁有純虛函數的類爲抽象類,抽象類不能定義對象,可以定義指針/引用。