c++问题,郁闷啊

来源:百度知道 编辑:UC知道 时间:2024/06/15 01:33:57
#include<iostream.h>

class a
{
public:
a()
{
cout<<"a create\n";
ax = 5;
}
int ax;
};

class b:virtual public a
{
public:
b()
{
cout<<"b create\n";
bx = 5;
}
int bx;
};

class c: public a
{
public:
c()
{
cout<<"c create\n";
cx = 5;
}
int cx;
};

class d:public b,virtual public c
{
public:
d()
{
cout<<"d create\n";
//ax = 5;
}
int dx;
};

void main()
{
d d_ob;
}
为什么构造函数会这样调用呢???
为什么是
a create
a create
c create
b create
d create

而不是
a create
c create
a create
b create
d create

首先看:class d:public b,virtual public c
virtual 有优先级,所以先构造c
构造c时先把a构造了,然后考虑构造c,因为class b: virtual public a 这里需要构造a,且它是virtual 构造,那么构造c比这个级别要低,所以就先构造b的a了,然后再构造c,再构造b,最后构造d.

比较好的顺序看看这个:
#include<iostream.h>

class a
{
public:
a()
{
cout<<"a create\n";
ax = 5;
}
int ax;
};

class b: virtual public a
{
public:
b()
{
cout<<"b create\n";
bx = 5;
}
int bx;
};

class c: virtual public a
{
public:
c()
{
cout<<"c create\n";
cx = 5;
}
int cx;
};

class d: public b, public c
{
public:
d()
{
cout<<"d create\n";
//ax = 5;
}
int dx;
};

void main()
{
d d_ob;
}

你这个题目只要记住下面几点就行了

C++构造函