c++一道关于继承和析构的笔试题
Posted seyjs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++一道关于继承和析构的笔试题相关的知识,希望对你有一定的参考价值。
题目如下,求输出结果
class A { public: A() { cout<<"A"<<endl; } ~A() { cout<<"~A"<<endl; } }; class B:public A { public: B(A &a):_a(a) { cout<<"B"<<endl; } ~B() { cout<<"~B"<<endl; } private: A _a; }; int main(void) { A a; B b(a); return 0; }
这里先给出答案:
[root]$ ./class A A B ~B ~A ~A ~A
你可能会觉得奇怪,为什么少调了一次A的构造函数。其实这是由于使用初始化列表,初始化列表在初始化类的对象的时候,使用的是拷贝构造函数。
修改代码,增加拷贝构造函数的打印。
class A { public: A() { cout<<"A"<<endl; } ~A() { cout<<"~A"<<endl; } A(const A& a) {cout << "copy" << endl;} }; class B:public A { public: B(A &a):_a(a) { cout<<"B"<<endl; } ~B() { cout<<"~B"<<endl; } private: A _a; }; int main(void) { A a; B b(a); return 0; }
再看运行结果,这样构造和析构的次数就一致了。
[root]$ ./class A A copy B ~B ~A ~A ~A
以上是关于c++一道关于继承和析构的笔试题的主要内容,如果未能解决你的问题,请参考以下文章