c++类中继承时,virtual 关键字怎么用,例如:

#include<iostream.h>classA{public:A(inta1){a=a1;}inta;};classB:virtualpublicA{public:... #include<iostream.h>
class A
{public:
A(int a1)
{a=a1;}
int a;
};
class B:virtual public A
{ public:
B(int a1,int b1):A(a1)
{b=b1;}
int b;
};
class D:virtual public B
{
public:
D(int a1,int b1,int d1):B(a1,b1)
{d=d1;//编译时指向这错,为什么?}
int d;

};
void main()
{D dd(1,2,3);
cout<<dd.a<<endl;
cout<<dd.b<<endl;
cout<<dd.d<<endl;}
error C2512: 'A::A' : no appropriate default constructor available
错误是什么意思
展开
 我来答
terranlong
2012-03-16 · TA获得超过7295个赞
知道大有可为答主
回答量:2660
采纳率:66%
帮助的人:4283万
展开全部
已改,看注释
#include<iostream>
using namespace std;
class A
{
public:
A(int a1)
{a=a1;}
int a;
};
class B:virtual public A
{
public:
B(int a1,int b1):A(a1)
{b=b1;}
int b;
};
class D:virtual public B
{
public:
D(int a1,int b1,int d1):B(a1,b1) ,A(a1) //这里也要把A类的构造函数写上
{d=d1; }//编译时指向这错,为什么?
int d;
};
void main()
{
D dd(1,2,3);
cout<<dd.a<<endl;
cout<<dd.b<<endl;
cout<<dd.d<<endl;
}
更多追问追答
追问
那为什么不加 virtual 时在写D的构造函数时不用加A的构造函数?
追答
因为是虚拟继承,基类的构造函数只被调用一次,就是调用D的构造函数前调用的A类无参的构造函数,而不是A类有参的构造函数
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kolonse
2012-03-16 · 超过33用户采纳过TA的回答
知道答主
回答量:176
采纳率:0%
帮助的人:96.9万
展开全部
你是虚继承,那么他是不会调用基类构造函数的,顺便说一点,虚继承,几乎不用,一般情况构造函数最好不要弄成虚的,你虚继承的话,积累构造函数也是虚的了!这样生成对象时就不会调用基类构造函数了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anguszhou07
2012-03-16
知道答主
回答量:10
采纳率:0%
帮助的人:4.2万
展开全部
构造函数不匹配!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幽壑之蛟
2012-03-16 · 超过15用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:27.8万
展开全部
去看看虚基类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式