C++,繼承,基類和派生類指標間賦值等知識

markriver發表於2021-09-09

1、派生類物件也“是”基類物件,但兩者不同。
2、派生類物件可以當做基類物件,這是因為派生類包含基類的所有成員。
但是基類物件無法被當做成派生類物件,因為派生類可能具有隻有派生類才有的成員。
所以,將派生類指標指向基類物件的時候要進行顯示的強制轉換,否則會使基類物件中的派生類成員成為未定義的。
總結:基類指標和派生類指標指向基類物件和派生類物件的4種方法:

  1. 基類指標指向基類物件,簡單。只需要透過基類指標簡單地呼叫基類的功能。
  2. 派生類指標指向派生類物件,簡單。只需要透過派生類指標簡單地呼叫派生類功能。
  3. 將基類指標指向派生類物件是安全的,因為派生類物件“是”它的基類的物件。
    但是要注意的是,這個指標只能用來呼叫基類的成員函式。
    如果試圖透過基類指標呼叫派生類才有的成員函式,則編譯器會報錯。
    為了避免這種錯誤,必須將基類指標強制轉化為派生類指標。然後派生類指標可以用來呼叫派生類的功能。這稱為向下強制型別轉換,這是一種潛在的危險操作。
    注意:如果在基類和派生來中定義了虛擬函式(透過繼承和重寫),並同過基類指標在派生類物件上呼叫這個虛擬函式,則實際呼叫的是這個函式的派生類版本。
  4. 將派生類指標指向基類物件,會產生編譯錯誤。“是”關係只適用於從派生類到它的直接(或間接)基類,反過來不行。
    基類物件並不包含派生類才有的成員,這些成員只能透過派生類指標呼叫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/818/viewspace-2799578/,如需轉載,請註明出處,否則將追究法律責任。

相關文章