您的位置:首页 > 职场人生

关于一道面试题目的理解

2018-03-07 18:59 281 查看
代码如下:

#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继承的基类),结束之后依次构造成员变量与初始化列表的顺序无关,注意的是成员变量构造的时候如何类中有基类先构造它的基类然后构造自己即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: