1. 程式人生 > >C++虛擬函式(2)

C++虛擬函式(2)

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){ }
…};