另外多繼承(環狀繼承),A->D, B->D, C->(A,B),例如:
class D{......}; class B: public D{......}; class A: public D{......}; class C: public B, public A{.....};
這個繼承會使D創建兩個對象,要解決上面問題就要用虛擬繼承格式
格式:class 類名: virtual 繼承方式 父類名
class D{......}; class B: virtual public D{......}; class A: virtual public D{......}; class C: public B, public A{.....};
虛繼承--(在創建對象的時候會創建一個虛表)在創建父類對象的時候
A:virtual public D B:virtual public D
實例:
#include <iostream> using namespace std; //基類 class D { public: D(){cout<<"D()"<<endl;} ~D(){cout<<"~D()"<<endl;} protected: int d; }; class B:virtual public D { public: B(){cout<<"B()"<<endl;} ~B(){cout<<"~B()"<<endl;} protected: int b; }; class A:virtual public D { public: A(){cout<<"A()"<<endl;} ~A(){cout<<"~A()"<<endl;} protected: int a; }; class C:public B, public A { public: C(){cout<<"C()"<<endl;} ~C(){cout<<"~C()"<<endl;} protected: int c; }; int main() { cout << "Hello World!" << endl; C c; //D, B, A ,C cout<<sizeof(c)<<endl; return 0; }
- 1、與類同名的函數是構造函數。
- 2、~ 類名的是類的析構函數。