11 多型與繼承(上)

2021-09-07 06:15:50 字數 1583 閱讀 1158

*: 在子類中定義與父類中原型同樣的函式

*: 函式重寫僅僅發生在父類與子類之間

問題所在:

(1)

c++與c同樣,是靜態編譯型語言

(2) 在編譯時,編譯器自己主動依據指標的型別推斷指向的是乙個什麼樣的物件

(3) 所以編譯器覺得父類指標指向的是父類物件

(4) 因為程式沒有執行。所以不可能知道父類指標指向的詳細是父類物件還是子類物件

(5) 從程式安全的角度。編譯器如果父類指標僅僅指向父類物件。因此編譯的結果為呼叫父類的成員函式。

void func(parent* p)

分析:在編譯這個函式的時候,編譯器不可能知道指標p指向什麼,可是沒有理由報錯,於是編譯器覺得最安全的做法是編譯到父類的print函式。依據實際的物件型別決定函式呼叫語句的詳細呼叫目標*: 假設父類指標指向的是父類物件,則呼叫父類中定義的函式

*: 假設父類指標指向的是子類物件,則呼叫子類中定義的重寫函式

多型: 相同的呼叫語句有多種不同的表現形態

c++中的多型支援

*:  c++中通過 virtual keyword對多型進行支援

*:  使用virtual宣告的函式被重寫後就可以表現出多型性

父類函式中增加virtual

class parent

{public:

virtual void print()

{ cout<

小結:

(1) 函式重寫僅僅可能發生在父類與子類之間

(2) virtual keyword是c++中支援多型的唯一方式

(3) 被重寫的虛函式就可以表現出多型性

多型與繼承(上)

函式重寫 在子類中定義與父類中原型相同的函式 函式重寫只發生在父類與子類之間 class parent 函式重寫 c 與 c相同,是靜態編譯型語言 在編譯時,編譯器自動根據指標的型別判斷指向的是乙個什麼樣的物件 所以編譯器認為父類指標指向的是父類物件 根據賦值相容性原則,這個假設合理 由於程式沒有執...

11章 繼承和多型

1 基類,也即父類,派生類,也即子類。派生類的宣告方式 class circle public geometricobject 2 構造函式呼叫基類建構函式 circle circle 其中可以新增引數 geometricobject 其中可以新增引數 只能在類的實現中呼叫基類的建構函式,不能再類的...

繼承與多型

繼承 繼承是c 語言支援 重用及多型的重要機制。通過繼承,可以繼承可以在現有類的基礎上派生出新類,新類將共享現有類的成員,並且還可以新增新的成員。c 語言中,重用主要表現為可以使用現成的類 如.net框架類庫中的類 來定義新類,主要方法有組合和繼承兩種 繼承是物件導向程式設計支援 重用的另乙個重要機...