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