繼承與多型(下)

2021-06-20 10:57:20 字數 1383 閱讀 6753

函式過載:

必須在同乙個類中進行

子類無法過載父類的函式,父類同名函式將被覆蓋

過載是在編譯期間根據引數型別和個數決定呼叫函式

函式重寫:

必須發生於父類與子類之間

並且父類與子類中的函式必須有完全相同的原型 使用

virtual

宣告之後能夠產生多型

多型是在執行期間根據具體物件的型別決定呼叫函式

c++

中多型的實現原理:

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表

虛函式表是乙個儲存類成員函式指標的資料結構

虛函式表是由編譯器自動生成與維護的

virtual

成員函式會被編譯器放入虛函式表中

存在虛函式時,每個物件中都有乙個指向虛函式表的指標

物件中的

vptr

指標什麼時候被初始化?

物件在建立的時候由編譯器對

vptr

指標進行初始化

只有當物件的構造完全結束後

vptr

的指向才最終確定

父類物件的

vptr

指向父類虛函式表

子類物件的

vptr

指向子類虛函式表

結論:建構函式中呼叫虛函式無法實現多型

用shape

作為基類進行繼承

class rectangle : public shape

double area()

};class circle : public shape//求圓的面積

double area()};

純虛函式是只宣告函式原型,而

故意不定義函式體的虛函式。

抽象類與純虛函式:

抽象類不能用於定義物件

抽象類只能用於定義指標和引用

抽象中的純虛函式必須被子類重寫

函式過載與函式重寫不同

多型是通過虛函式表實現的

虛函式在效率上會受到影響

抽象類可用於表示現實世界中的抽象概念

抽象類是通過純虛函式實現的

繼承與多型(下)

虛函式深入理解 純虛函式 小結過載和重寫有什麼區別?什麼時候是過載,什麼時候是重寫?include include using namespace std class parent int main int argc,char ar virtual void func 分析 這個類的設計完全脫離實際...

12 繼承與多型(下)

class parent 通過虛函式表指標vptr呼叫重寫函式是在程式執行時進行的,因此需要通過定址操作才能確 定 真正的應該呼叫的函式。而普通成員函式是在編譯時就確定了呼叫的函式。在效率上,虛函式 的效率 要低的多。注意 處於效率的考慮,沒有必要把所有的成員函式都宣告為虛函式。物件中vptr指標什...

繼承與多型

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