定義:
用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 簡介 假設我們有下面的類層...