求教一道关于C++继承的题目!

#include<iostream>#include<string>usingnamespacestd;classpeople{public:stringname;peo... #include <iostream>
#include <string>
using namespace std;
class people
{
public:
string name;
people()
{
cout<<"Please input name:";
cin>>name;
}
};
class chinese:public people
{
public:
string province;
chinese()
{
cout<<"Please input province:";
cin>>province;
}
};
class student:public people
{
public:
string xueli;
student()
{
cout<<"Please input xueli:";
cin>>xueli;
}
};
class chinese_student:public chinese,public student
{
public:
void print()
{
cout<<"name:"<<chinese::name<<endl;
cout<<"province:"<<province<<endl;
cout<<"xueli:"<<xueli<<endl;
}
};
int main()
{
chinese_student cs;
cs.print();
return 0;
}

问题一:chinese_student类既继承了chinese类,又继承了student类,当初始化cs对象时,要输入两次name,而我只想让输入一次,怎么办?
问题二:而且chinese_student的print函数输出name的时候还必须像这样chinese::name指定个域才行,不然就报错。当(子类继承的两个父类)又有公共的父类,那这个父类的成员岂不是要重复了?就像问题一里的情况?
展开
 我来答
百度网友b0bba24
2013-03-22 · TA获得超过887个赞
知道小有建树答主
回答量:446
采纳率:0%
帮助的人:469万
展开全部
修改如下:
#include <iostream>
#include <string>
using namespace std;
class people
{
public:
string name;
people()
{
cout<<"Please input name:"; cin>>name;
}
};
class chinese:public virtual people//用虚基类,因为从你的分类情况看,chinese这个类是从
//国家这种角度来分的,而你下面的student类是从职业角度来分的,这样你的chinese_student
//类就变成有重复的部分了,对于这种情况,就需要用虚基类了。
{
public:
string province;
chinese()
{
cout<<"Please input province:";
cin>>province; }
};
class student:public virtual people//理由同上
{
public:
string xueli;
student()
{ cout<<"Please input xueli:"; cin>>xueli; }
};
class chinese_student:public chinese,public student//这里就直接继承,这样people就只有一份
//版本了
{
public:
void print()
{ cout<<"name:"<<name<<endl; //因为people只有一份版本了,这个就不再需要区分什么
cout<<"province:"<<province<<endl; cout<<"xueli:"<<xueli<<endl; }
};
int main()
{ chinese_student cs; cs.print(); return 0;}
zjfaok
2013-03-22 · TA获得超过6807个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1641万
展开全部
这种问题就是C++的虚继承出现的原因……
不使用虚继承时,当子类继承的两个父类又有公共的父类,那这个子类就会有两组”公共的父类“的成员,而假如chinese和student是虚继承自people的时候,需要在各自的构造函数里面显式调用people的构造函数,但是在chinese_student类里面就可以只保留一组people类的成员……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伤我中国心
2013-03-22 · TA获得超过112个赞
知道答主
回答量:233
采纳率:0%
帮助的人:147万
展开全部
这个是虚基类的问题,在c++中为了解决这种问题要用到虚基类,还可以节省内存空间,你最好还是自己看看书,跟你说只是片面的,谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帅笑翠G7
2013-03-22 · 超过19用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:25.9万
展开全部
继承层次有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
H_大明
2013-03-22 · TA获得超过260个赞
知道小有建树答主
回答量:266
采纳率:50%
帮助的人:53万
展开全部
不是我不说 是我看不懂啊

我刚学到第三章
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式