关于一道面试题目的理解
2018-03-07 18:59
281 查看
代码如下:
求出他们的打印结果,一看就是在考察C++构造顺序,在这个题目里边我可以总结如下:Derived继承了Base2与Base1,而Base2与Base1又继承了Base ,那么刚开始就要构造他们的基类Base,完了之后是构造Derived继承的Base2与Base1(注意不够构造Base2与Base1继承的基类),结束之后依次构造成员变量与初始化列表的顺序无关,注意的是成员变量构造的时候如何类中有基类先构造它的基类然后构造自己即可。
#include<iostream> using namespace std; class Base { public: Base(int i) { cout << i << endl; cout << "Base::Base()" << endl; } ~Base() { cout << "Base::~Base()" << endl; } }; class Base1: virtual public Base { public: Base1(int i, int j=0) : Base(j) { cout << i << endl; cout << "Base1::Base1()" << endl; } ~Base1() { cout << "Base1::~Base1()" << endl; } }; class Base2: virtual public Base { public: Base2(int i, int j=0) : Base(j) { cout << i << endl; cout << "Base2::Base2()" << endl; } ~Base2() { cout << "Base2::~Base2()" << endl; } }; class Derived : public Base2, public Base1 { public: Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), Base2(d),Base(a) { cout << b << endl; cout << "Derived::Derived()" << endl; } ~Derived() { cout << "Derived::~Derived()" << endl; } private: Base2 mem2; Base1 mem1; }; void main() { Derived objD (1, 2, 3, 4); }
求出他们的打印结果,一看就是在考察C++构造顺序,在这个题目里边我可以总结如下:Derived继承了Base2与Base1,而Base2与Base1又继承了Base ,那么刚开始就要构造他们的基类Base,完了之后是构造Derived继承的Base2与Base1(注意不够构造Base2与Base1继承的基类),结束之后依次构造成员变量与初始化列表的顺序无关,注意的是成员变量构造的时候如何类中有基类先构造它的基类然后构造自己即可。
相关文章推荐
- 一道面试题目,关于this的理解
- 关于金山的一道面试题目
- 一道微软面试时碰到的,经典的,关于字符串操作的面试题目
- 一道关于C++ 的面试题目(继承、构造函数以及析构函数)
- 关于中国象棋的一道微软面试题目
- 百度一道关于算法的面试题目
- 关于Notify() wait()的一道面试题目
- 关于金山的一道面试题目
- 关于腾讯面试的一道题目
- 一道月薪3万的Java面试题目
- 杨辉三角与一道经典笔试面试题目
- 一道面试题目解法
- 一道IBM面试题目,写程序题
- POJ 3057 Evacuation(一道很好可以加强对二分图理解的题目)
- 关于一道小学奥数题目
- 关于对象创建及初始化的面试向理解
- 77.关于链表问题的面试题目如下:
- 360一道关于this的题目
- 面试中常问的关于链表的题目
- java 面试中的一道截取字符串的经典题目