C++型別相容規則?

這篇是我總結歸納型別相容規則知識,加上自己見解的學習經驗,為了讓大家更容易理解,學習的時候請務必耐心仔細。

型別相容規則是指在需要基類物件的任何地方,都可以使用公有派生類的物件來替代。注意這裡是使用以公有繼承方式繼承的派生類,公有派生類實際就具備了基類的所有功能,凡是基類能解決的問題,公有派生類都可以解決。這裡的“替代”一詞用的很好,是指以派生類的物件代替基類的物件,並起原來由基類物件起的作用。

在替代之後,派生類物件就可以作為基類的物件使用,但只能從基類繼承的成員。

工具/原料

VC6.0

方法/步驟

派生類物件可以隱含轉換為基類物件,即用派生類物件中從基類繼承來的成員,逐個賦值給基類物件的成員。

派生類的物件包含了基類的物件所有的成員,所以可以逐個賦值給基類物件的成員。但是派生類物件有基類物件所不含有的成員,所以基類物件不能賦值給基類物件的成員。這就相當於d1為一個基類物件,然後將d1賦給b1。

C++型別相容規則

派生類的物件也可以初始化基類物件的引用。

基類的物件作為派生類物件的引用,基類物件的是派生類物件的別名,但這個別名只能包含派生類物件中的由基類繼承來的隱藏物件 ,基類物件rb的改動將同時改動派生類物件d1從基類繼承所相對應的成員。

C++型別相容規則

派生類物件的地址也可以隱含轉換為指向基類的指標。

基類的物件指標指向派生類物件的地址。這句話可以用上面第一句來解釋,可以看成將派生類物件先隱含轉換為基類物件,並將基類的指標地址指向派生類的記憶體單元地址。

C++型別相容規則

方法/步驟2

根據型別相容規則,當函式的形參為基類的物件(或引用、指標)時,實參可以是派生類的物件(或指標),而沒有必要為每一個類設計單獨的模組,大大提高了程式的效率,這正是C++的多型性。

這裡是例項,這裡的fun函式的形參是Base1類型別的指標,實參用的是派生類型別的物件。也就是說,進入指標指向派生類物件,fun函式執行時通過這個指標只能訪問到派生類從基類Base1繼承過來的成員函式dispay(),所以最後結果是運行了基類的成員函式display()。

C++型別相容規則

C++型別相容規則

注意事項

規則, 物件, 型別, 派生類, 基類,
相關問題答案