虚继承
当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:
class CBase { };
class CDerive1:virtual public CBase{ };
class CDerive2:virtual public CBase{ };
class CDerive12:public CDerive1,CDerive2{ };
则在类CDerive12的对象中,仅有类CBase的一个对象数据。
虚析构函数
如果没有虚析构函数,父类指针delete对象就只会调用父类的析构函数,如果加上虚析构函数的话,那么,析构父类指针指向的子类对象时候会先调用子类的析构函数,再调用父类的构造函数。
class Parent
{
public:
int a;
Parent()
{
cout << "父亲的构造函数" << endl;
}
virtual ~Parent() {
cout << "父亲的析构函数" << endl;
}
};
class Child : public Parent
{
public:
Child()
{
cout << "子类的构造函数" << endl;
}
virtual ~Child()
{
cout << "子类的析构函数" << endl;
}
};