C++,繼承,基類和派生類指標間賦值等知識
1、派生類物件也“是”基類物件,但兩者不同。
2、派生類物件可以當做基類物件,這是因為派生類包含基類的所有成員。
但是基類物件無法被當做成派生類物件,因為派生類可能具有隻有派生類才有的成員。
所以,將派生類指標指向基類物件的時候要進行顯示的強制轉換,否則會使基類物件中的派生類成員成為未定義的。
總結:基類指標和派生類指標指向基類物件和派生類物件的4種方法:
- 基類指標指向基類物件,簡單。只需要透過基類指標簡單地呼叫基類的功能。
- 派生類指標指向派生類物件,簡單。只需要透過派生類指標簡單地呼叫派生類功能。
- 將基類指標指向派生類物件是安全的,因為派生類物件“是”它的基類的物件。
但是要注意的是,這個指標只能用來呼叫基類的成員函式。
如果試圖透過基類指標呼叫派生類才有的成員函式,則編譯器會報錯。
為了避免這種錯誤,必須將基類指標強制轉化為派生類指標。然後派生類指標可以用來呼叫派生類的功能。這稱為向下強制型別轉換,這是一種潛在的危險操作。
注意:如果在基類和派生來中定義了虛擬函式(透過繼承和重寫),並同過基類指標在派生類物件上呼叫這個虛擬函式,則實際呼叫的是這個函式的派生類版本。 - 將派生類指標指向基類物件,會產生編譯錯誤。“是”關係只適用於從派生類到它的直接(或間接)基類,反過來不行。
基類物件並不包含派生類才有的成員,這些成員只能透過派生類指標呼叫。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/818/viewspace-2799578/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [C++]繼承和派生類C++繼承
- 繼承 基類與派生類繼承
- 類的繼承和派生繼承
- C# 繼承 子類(派生類) 父類(基類)C#繼承
- C++ | 類繼承C++繼承
- JAVA介面繼承、抽象類等Java繼承抽象
- 類的繼承_子類繼承父類繼承
- 區分:派生類指定基類建構函式、繼承構造、委託構造函式繼承
- 從本質認識JavaScript的原型繼承和類繼承JavaScript原型繼承
- JS原型繼承和類式繼承JS原型繼承
- C++ 派生類函式過載與虛擬函式繼承詳解C++函式繼承
- 變數的賦值 指標間接賦值變數賦值指標
- C++中類繼承public,protected和private關鍵字作用詳解及派生類的訪問許可權C++繼承訪問許可權
- C++知識點49——類繼承與類的構造、拷貝、operator=和解構函式C++繼承函式
- 繼承與派生繼承
- JavaScript基礎: 類與繼承JavaScript繼承
- 菱形繼承與虛基類繼承
- C++派生類物件訪問基類的protected成員C++物件
- es5繼承和es6類和繼承繼承
- UML類圖(上):類、繼承和實現繼承
- Java之繼承和抽象類Java繼承抽象
- 繼承 重寫和抽象類繼承抽象
- corejava基礎知識(1)-繼承Java繼承
- 類的繼承繼承
- javascript類繼承JavaScript繼承
- C++ 類成員指標C++指標
- 在 C++ 中子類繼承和呼叫父類的建構函式方法C++繼承函式
- 在C++中子類繼承和呼叫父類的建構函式方法C++繼承函式
- C++標準庫中檔案流類的繼承關係C++繼承
- C++ exception 異常類繼承關係C++Exception繼承
- 基類與派生類的轉換
- 征服 JavaScript 面試:類繼承和原型繼承的區別JavaScript面試繼承原型
- JavaSE基礎知識學習-----繼承Java繼承
- TypeScript 介面繼承類TypeScript繼承
- 原型繼承:子類原型繼承
- iOS 繼承&類方法iOS繼承
- Java:類與繼承Java繼承
- C++知識點隨筆(五):虛繼承C++繼承