12 繼承與多型(下)

2021-06-26 02:59:41 字數 1288 閱讀 5789

class parent

通過虛函式表指標vptr呼叫重寫函式是在程式執行時進行的,因此需要通過定址操作才能確        定

真正的應該呼叫的函式。而普通成員函式是在編譯時就確定了呼叫的函式。在效率上,虛函式            的效率

要低的多。

注意: 處於效率的考慮,沒有必要把所有的成員函式都宣告為虛函式。

物件中vptr指標什麼時候被初始化的?

(1) 物件在建立的時候由編譯器對vptr指標進行初始化,

(2) 只有當物件的構造完全結束後vptr的指向才最終確定

(3) 父類物件的vptr指向父類虛函式表

(4) 子類物件的vptr指向子類虛函式表

class parent

virtual void func()

;

area是純虛函式, =0 告訴編譯器這個函式故意只宣告不定義。

class shape

;class rectangle : public shape

double area()

};class circle : public shape

double area()

};void area(shape* s)

{ cout

(1) 函式過載與函式重寫不同

(2) 多型是通過虛函式實現的

(3) 虛函式在效率上會有影響

(4) 抽象類是通過純虛函式實現的。     

繼承與多型(下)

函式過載 必須在同乙個類中進行 子類無法過載父類的函式,父類同名函式將被覆蓋 過載是在編譯期間根據引數型別和個數決定呼叫函式 函式重寫 必須發生於父類與子類之間 並且父類與子類中的函式必須有完全相同的原型 使用 virtual 宣告之後能夠產生多型 多型是在執行期間根據具體物件的型別決定呼叫函式 c...

繼承與多型(下)

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

繼承與多型

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