派生類對象也“是”基類對象,但兩者不同。
派生類對象可以當做基類對象,這是因為派生類包含基類的所有成員。
但是基類對象無法被當做成派生類對象,因為派生類可能具有只有派生類才有的成員。
所以,將派生類指針指向基類對象的時候要進行顯示的強制轉換,否則會使基類對象中的派生類成員成為未定義的。
總結:基類指針和派生類指針指向基類對象和派生類對象的4中方法:
1. 基類指針指向基類對象,簡單。只需要通過基類指針簡單地調用基類的功能。
2. 派生類指針指向派生類對象,簡單。只需要通過派生類指針簡單地調用派生類功能。
3. 將基類指針指向派生類對象是安全的,因為派生類對象“是”它的基類的對象。
但是要注意的是,這個指針只能用來調用基類的成員函數。
如果試圖通過基類指針調用派生類才有的成員函數,則編譯器會報錯。
為了避免這種錯誤,必須將基類指針強制轉化為派生類指針。然后派生類指針可以用來調用派生類的功能。這稱為向下強制類型轉換,這是一種潛在的危險操作。
注意:如果在基類和派生來中定義了虛函數(通過繼承和重寫),並同過基類指針在派生類對象上調用這個虛函數,則實際調用的是這個函數的派生類版本。
4. 將派生類指針指向基類對象,會產生編譯錯誤。“是”關系只適用於從派生類到它的直接(或間接)基類,反過來不行。
基類對象並不包含派生類才有的成員,這些成員只能通過派生類指針調用。
轉自http://blog.csdn.net/feitianxuxue/article/details/7326402
《C語言深度解剖》我用2天時間看完了,那本書的自測題,我才做了60多分。我覺得我面試的時候要是遇到這樣的題目,我會感覺這個公司出題很有水平。感覺這本書寫的很好,是我繼讀完林銳博士的《高質量C/C++編程語言》后遇到的又一本好書