派生類物件也「是」基類物件,但兩者不同。
派生類物件可以當做基類物件,這是因為派生類包含基類的所有成員。
但是基類物件無法被當做成派生類物件,因為派生類可能具有只有派生類才有的成員。
所以,將派生類指標指向基類物件的時候要進行顯示的強制轉換,否則會使基類物件中的派生類成員成為未定義的。
總結:基類指標和派生類指標指向基類物件和派生類物件的4中方法:
基類指標指向基類物件,簡單。只需要通過基類指標簡單地呼叫基類的功能。
派生類指標指向派生類物件,簡單。只需要通過派生類指標簡單地呼叫派生類功能。
將基類指標指向派生類物件是安全的,因為派生類物件「是」它的基類的物件。
但是要注意的是,這個指標只能用來呼叫基類的成員函式。
如果試圖通過基類指標呼叫派生類才有的成員函式,則編譯器會報錯。
為了避免這種錯誤,必須將基類指標強制轉化為派生類指標。然後派生類指標可以用來呼叫派生類的功能。這稱為向下強制型別轉換,這是一種潛在的危險操作。
注意:如果在基類和派生來中定義了虛函式(通過繼承和重寫),並同過基類指標在派生類物件上呼叫這個虛函式,則實際呼叫的是這個函式的派生類版本。
將派生類指標指向基類物件,會產生編譯錯誤。「是」關係只適用於從派生類到它的直接(或間接)基類,反過來不行。
基類物件並不包含派生類才有的成員,這些成員只能通過派生類指標呼叫。
基類指標指向派生類物件
成員函式一般化三個結論 include using std cout using std endl class employee class dev public employee int main 1.如果以 基類指標 指向 派生類物件 那麼經由該指標只能呼叫基類所定義的函式 2.如果以 派生類指...
基類指標指向派生類物件
父類子類指標函式呼叫注意事項 1,如果以乙個基礎類指標指向乙個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以乙個衍生類指標指向乙個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾...
基類指標指向派生類物件
派生類物件也 是 基類物件,但兩者不同。派生類物件可以當做基類物件,這是因為派生類包含基類的所有成員。但是基類物件無法被當做成派生類物件,因為派生類可能具有只有派生類才有的成員。所以,將派生類指標指向基類物件的時候要進行顯示的強制轉換,否則會使基類物件中的派生類成員成為未定義的。總結 基類指標和派生...