一个特别变态的C++题目,关于构造顺序,和调用顺序

月光散落 发布于 2016/03/27 10:21
阅读 237
收藏 1
#include <iostream>
using namespace std;
class A{
public:
A(int a) :x(a){                    //构造函数 
cout << "A constructor......  "  << x << endl;
}
int f(){
cout << "I come from A: " << endl;
return ++x; //自增1 
}
~A(){ cout << "destructor A......" << endl; }
private:
int x; 
};
class B :public virtual A{    //公有虚拟继承 
private:
int y;
A Aobj;  //A对象成员 
public:
B(int a, int b, int c) : A(a), y(b), Aobj(c) //构造函数 
{
cout << "B constructor..." << y << endl;
}
int f(){
A::f();
Aobj.f();
cout << "i come from B   "  << endl;
return ++y;
}
void display(){
cout << A::f() << "\t" << Aobj.f() << "\t" << f() << endl;
}
~B(){
cout << "destructor B.....\n";
}
};
class C:public B{ //从B公有继承 
public:
C(int a, int b, int c) : B(a, b, c), A(0){ cout << "C constructor...... " << endl; }
};
class D: public C, public virtual A{ //从C,A继承 
public:
D(int a,int b, int c):C(a, b, c), A(c){
cout << "D constructor.....  "<< endl;
}
~D(){
cout << "destructor D.... " << endl;
}
};
int main(){
D d(7,8,9); 
d.f();
d.display();
return 0;
}

结果是(我崩溃了):

那位大神能帮我看看吗,,,,555555555555555

加载中
0
风之轮
风之轮

首先执行虚基类的构造函数,多个虚基类的构造函数按照被继承的顺序构造
执行基类的构造函数,多个基类的构造函数按照被继承的顺序构造;
执行成员对象的构造函数,多个成员对象的构造函数按照申明的顺序构造;
执行派生类自己的构造函数;
析构以与构造相反的顺序执行

月光散落
月光散落
构造顺序与析构顺序看懂了,但调用d.f( )后,又执行d.display( ),输出的结果就是右序入栈的结果。今天才全部看懂。谢谢你啊
返回顶部
顶部