*: 在子類中定義與父類中原型同樣的函式
*: 函式重寫僅僅發生在父類與子類之間
問題所在:
(1)
c++與c同樣,是靜態編譯型語言
(2) 在編譯時,編譯器自己主動依據指標的型別推斷指向的是乙個什麼樣的物件
(3) 所以編譯器覺得父類指標指向的是父類物件
(4) 因為程式沒有執行。所以不可能知道父類指標指向的詳細是父類物件還是子類物件
(5) 從程式安全的角度。編譯器如果父類指標僅僅指向父類物件。因此編譯的結果為呼叫父類的成員函式。
分析:在編譯這個函式的時候,編譯器不可能知道指標p指向什麼,可是沒有理由報錯,於是編譯器覺得最安全的做法是編譯到父類的print函式。依據實際的物件型別決定函式呼叫語句的詳細呼叫目標*: 假設父類指標指向的是父類物件,則呼叫父類中定義的函式void func(parent* p)
*: 假設父類指標指向的是子類物件,則呼叫子類中定義的重寫函式
多型: 相同的呼叫語句有多種不同的表現形態
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框架類庫中的類 來定義新類,主要方法有組合和繼承兩種 繼承是物件導向程式設計支援 重用的另乙個重要機...