C 虛函式 虛表和純虛函式

2021-08-19 10:41:55 字數 1889 閱讀 9753

定義:

用virtual修飾的成員函式稱為虛函式;

重寫(覆蓋):

當在子類中定義了乙個與父類完全相同的虛函式時,則稱這個子類的函式重寫(或覆蓋)了父類的函式;

例:

#includeusing namespace std;

class person

virtual void h1()

int _b;

};class derive:public base

virtual void h2()

int _d;

};

例項物件base b;derive d;模型:

};例項物件base b;derive d;模型:

};例項物件base1 b1;base2 b2;derive d;模型:

virtual void g2()//覆蓋base2的函式g2()

int _d;

};例項物件base1 b1;base2 b2;derive d;模型:

1.單繼承

子類和父類有各自的虛表,子類虛表拷貝父類虛表中的內容,並會更新構成覆蓋的函式位址;

2.多繼承

子類中包含多個虛表(取決於繼承的個數),各自拷貝父類虛表中的內容,並更新構成覆蓋的函式位址,對於子類中沒有構成覆蓋的虛函式,將其位址新增到最先繼承類的虛表中;

定義:

在虛函式後面賦值0;

例:

class a

;class b : public a

{};

定義:含有純虛函式的類稱為抽象類(介面類),抽象類不能例項化出物件

注意:(1)凡是包含純虛函式的類都是抽象類;

(2)抽象類不能例項化出物件;

(3)純虛函式在派生類中重新定義以後,派生類才能例項化出物件;

抽象類/介面類的作用:

抽象類的存在,使得子類必須重寫虛函式才能例項化出物件;

c 虛函式和純虛函式

虛函式 定義 在基類中用virtual宣告,不一定不被實現,可以用基類的指標來呼叫子類的對應函式,實現成員函式的動態過載。子類virtual可寫可不寫,編譯器自動加上。1.以下繼承後的print 相當於重寫,兩個類print 方法輸出結果不同 class a 2.加了vitual 定義為虛函式以後,...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...

C 虛函式和純虛函式

首先 強調乙個概念 定義乙個函式為虛函式,不代表函式為不被實現的函式。定義他為虛函式是為了允許用基類的指標來呼叫子類的這個函式。定義乙個函式為純虛函式,才代表函式沒有被實現。定義純虛函式是為了實現乙個介面,起到乙個規範的作用,規範繼承這個類的程式設計師必須實現這個函式。1 簡介 假設我們有下面的類層...