C++虛擬函式(2)
阿新 • • 發佈:2018-12-25
class x { char *p; public: x(int sz) {p=new char[sz];} virtual ~x(){cout << "~x()\n"; delete []p;} }; class y : public x { char *pp; public: y(int sz1, int sz2) : x(sz1){pp=new char[sz2];} ~y(){cout << "~y()\n"; delete []pp;} }; void main(){ x* px=new y (10,20); delete px; }
class 派生類名: virtual 繼承方式 基類名
class A //宣告基類A
{…};
class B :virtual public A //宣告類B是類A的公用派生類,A是B的虛基類
{…};
class C :virtual public A //宣告類C是類A的公用派生類,A是C的虛基類
{…};
class A //定義基類A {A(int i){ } //基類建構函式,有一個引數 …}; class B :virtual public A //A作為B的虛基類 {B(int n):A(n){ } //B類建構函式,在初始化表中對虛基類初始化 …}; class C :virtual public A //A作為C的虛基類 {C(int n):A(n){ } //C類建構函式,在初始化表中對虛基類初始化 …}; class D :public B,public C//類D的建構函式,在初始化表中對所有基類初始化 {D(int n):A(n),B(n),C(n){ } …};