描述
用C++实现类Base和Derived,使其能输出样例信息。
主函数里的代码已经给出,请补充完整,提交时请勿包含已经给出的代码。
int main() { Base b; Base *p = new Derived; delete p; return 0; }
输入
无
输出
输出样例信息
样例输入
样例输出
Base Constructor
Base Constructor
Derived Constructor
Derived Destructor
Base Destructor
Base Destructor
题解
派生类因为要调用基类, 所以构造和析构都是按照一定顺序进行;
构造的顺序是: 基(base) -> 派生(derived)【即先构造基类, 再构造派生类】
因为 基类 是独立于派生类的, 即不会调用派生类中的对象, 所以应该先被生成;
如果派生类先于基类生成, 则因为无法调用基类资源, 可能生成失败;
析构的顺序是: 派生(derived) -> 基(base)【即先释放派生类, 再释放基类】
因为 派生类 需要先释放调用的基类资源, 所以应该优先释放;
基类的析构函数加了virtual就可以动态绑定派生类的析构函数,这样的话,在执行多态后删除其对象,就可以在删除对象的时候执行派生类的析构函数了(当然执行基类的析构函数是一定会的)。否则不会执行派生类的析构函数,只会执行基类的析构函数。
#include<iostream> using namespace std; class Base{ public: Base() { cout<<"Base Constructor"<<endl; } virtual~Base() { cout<<"Base Destructor"<<endl; } }; class Derived:public Base{ public: Derived() { cout<<"Derived Constructor"<<endl; } ~Derived() { cout<<"Derived Destructor"<<endl; } }; int main() { Base b; Base *p = new Derived; delete p; return 0; }