C++不是说虚基类构造函数只被调用一次吗?

#include<iostream>usingnamespacestd;classbus{protected:intweight;public:voidshow(){co... #include <iostream>
using namespace std;
class bus
{
protected:
int weight;
public:
void show()
{
cout<<"bus weigth is:"<<weight<<endl;
}
void set(int weight)
{
this->weight=weight;
}
bus()
{
weight=0;
cout<<"虚基类bus只被初始化一次"<<weight<<endl;
}
};

class minibus:virtual public bus
{
public:
void show()
{
cout<<"minibus weigth is:"<<weight<<endl;
}
};

class maxbus:virtual public bus
{
public:
void show()
{
cout<<"maxbus weigth is:"<<weight<<endl;
}
};

void main()
{
bus a;
minibus b;
maxbus c;
a.show();
b.show();
c.show();
a.set(50);
a.show();
b.show();
c.show();
}
这个程序输出可以看到是虚基类的构造函数被调用了3次,这是什么原因?是因为我在最远派生类中没有使用构造函数造成的吗?但书上说程序会自动调用自定义的默认构造函数来初始化的哦,这是为什么?请高手指教下~
展开
 我来答
vbtraz
2010-04-24 · TA获得超过5531个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4426万
展开全部
不知道是书没说明白还是你没看明白, 总之你完全理解错了。

所谓只调用一次, 是说每个对象的构造当中只调用一次。 如果多个对象当然调用多次

对比一下虚继承和非虚继承的差别:
如果B (非虚,后面就不写了)继承A, C也继承A,D继承B和C,最终D里有两份A的内容,D的对象构造的时候A的构造函数也会被调用两次。
如果 B 虚继承A , C也虚继承A, D继承B和C, 最终D的对象里只有一份从A继承下来的东西,D的对象构造的时候A的构造函数也只调用一次
dufei414
2010-04-24 · TA获得超过289个赞
知道小有建树答主
回答量:322
采纳率:0%
帮助的人:272万
展开全部
虚基类的构造函数只被调用一次是指多继承情况下,每个对象只调用一次虚基类构造函数 ,这样避免发生二义性
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式