1.构造函数
构造函数不能是虚函数,这是不符合语法规则的,编译时出错。创建派生类的对象时,将调用派生类的构造函数,而不是基类的构造函数,然后再调用基类的构造函数,这种顺序不同于继承机制,另外派生类不继承基类的构造函数和析构函数。
2.析构函数
析构函数应该声明成虚函数
#include<iostream>
class Base
{
public:
Base()
{std::cout<<"This is Base ctr"<<std::endl;}
virtual ~Base()
{std::cout<<"This is Base dtr"<<std::endl;}
};
class inherit : public Base
{
public:
inherit()
{std::cout<<"This is inherit ctr"<<std::endl;}
~inherit()
{std::cout<<"This is inherit dtr"<<std::endl;}
};
int main(int argc, char const* argv[])
{
Base* pb = new inherit();
delete pb;
return 0;
}
这样可以确保析构的顺序,即当释放基类指向的内存时,先调用子类的析构函数,再调用基类的析构函数(如图)
友好的编码人员,无论基类与否,析构函数都定义为虚析构函数,这是一个效率问题—————————-《C++ primer plus》