c 虛函式 多重繼承

2021-08-10 03:44:21 字數 731 閱讀 4699

如果類有虛函式,則類會有預設的乙個指標成員指向虛函式表(可能儲存在全域性區)的位址,指標占用4個位元組。

虛函式:

// easytest.cpp: 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

using namespace std;

class a

};class b : public a

};int main()

兩個都會輸出  this is a,不滿足多型要求。

用來做基類的類的析構函式一般都是虛函式。    

例:a類,b類 (繼承了a)

a a=new b;

a.print(); 則會輸出a的print(); 正如  a::a.print();  會根據指標型別,指標型別在編譯時已知。 編譯器對非虛方法使用靜態編譯。

若print()為virtual則輸出b的print();  會根據物件型別,通常只有在執行時才能確定物件型別。編譯輯器對虛方法使用動態編譯。

純虛函式:

把虛函式賦值為0就是純虛函式。

純虛函式必須在子類中實現,否則子類也不可例項化。虛函式則不必在子類中實現。

多重繼承:

b繼承a,c繼承a,d繼承b、c。

需要用到虛基類:b virtual public a    cvirtual public a

d:public b,public c  這樣就不會有二義性。

C 多重繼承 虛繼承

c 中的多繼承,建構函式處理並沒有問題,物件構造的時候按照繼承中宣告的順序呼叫多個父類的建構函式,析構函式同樣遵守單繼承中的原則。二意性問題 如果多基類中存在同名成員,會產生二意性的問題 比如,root1類中宣告doany 介面,root2類中也宣告了doany 介面,child多承繼root1和r...

C 之虛函式和多重繼承

原文出處 原文的作者是aaron ballman,voting member of the c standards committee.class a virtual void foo class b virtual void bar class c public a,public b void f...

C 多重繼承與虛繼承

在派生類中對基類成員的訪問應該是唯一的。但是,在多繼承情況下,可能造成對基類中某個成員的訪問出現了不一致的情況,這時就稱對基類成員的訪問產生了二義性。派生類在訪問基類成員函式時,由於基類存在同名的成員函式,導致無法確定訪問的是哪個基類的成員函式,因此出現了二義性錯誤。例如 includeusing ...