多繼承 virtual


另外多繼承(環狀繼承),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、~ 類名的是類的析構函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM