构造函数的调用顺序是:先基类后派生类
析构函数的调用顺序是:先派生类后基类
一个类的对象析构时,只能调用到其基类的析构函数,无法调用到其派生类的析构函数。当遇到基类对象析构需要调用到其派生类的析构函数时,将析构函数声明为virtual函数就可以解决这个问题。
测试代码:
#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
class Base
{
public:
Base()
{
}
virtual ~Base()
{
Print();
}
virtual void Print()
{
cout<< "Base : release";
}
};
class T1:public Base
{
public:
T1()
{
}
virtual ~T1()
{
Print();
}
virtual void Print()
{
cout << "T1 : release";
}
};
class T2:public T1
{
public:
T2()
{
}
virtual ~T2()
{
Print();
}
virtual void Print()
{
cout << "T2 : release ";
}
};
int _tmain(int argc, _TCHAR* argv[])
{
{
Base T1;
T1.Print();
}
Base* p = new T2;
delete p;
{
T1 p;
p.Print();
}
system("pause");
return 0;
}