虚基类在解决二义性中的问题中的作用是什么

 我来答
ziguowen
推荐于2018-03-22 · TA获得超过2723个赞
知道小有建树答主
回答量:785
采纳率:35%
帮助的人:352万
展开全部
虚基类用于某类从多个类继承,这多个基类有共同基类时,这个最上层基类的成员会多次在最终派生类出现而产生二义性,为避免二义性,使得最终派生类中,最上层的基类成员只有一份,这时需要虚拟继承,该最上层类就是虚基类,需要注意的是,该类在第一层派生时就要虚拟继承才行,使用方法是在继承方式前加上一个 virtual就可以了。

找个程序给你看一下:

1.为解决多继承产生的二义性问题,可以使用虚基类来消除二义性问题、如:
//在最后的派生类中,不仅要负责对直接基类进行初始化,还要负责对虚基类进行初始化
//编译系统只执行最后的派生类对虚基类的构造函数的调用,而忽略虚基类的其他派生类对虚基类的构造函数的调用,这就保证了虚基类的//数据成员不会被多次初始化、
#include<iostream>
#include<string>
using namespace std;
class person
{
protected:
string name;
char sex;
int age;
public:
person(string nam,char s,int a):name(nam),sex(s),age(a)
{ }
};
class teacher:virtual public person
{
protected:
string title;
public:
teacher(string nam,char s,int a,string t):person(nam,s,a),title(t)
{ }
};
class student:virtual public person
{
protected:
float score;
public:
student(string nam,char s,int a,float sco):person(nam,s,a),score(sco)
{ }

};
class Graduate:public teacher,public student
{
private:
float wawg;
public:
Graduate(string nam,char s,int a,string t,float sco,float w):person(nam,s,a),teacher(nam,s,a,t),student(nam,s,a,sco),wawg(w){}
void show()
{
cout<<"name:"<<name<<endl;
cout<<"age:"<<age<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"score:"<<score<<endl;
cout<<"title:"<<title<<endl;
cout<<"wawgs:"<<wawg<<endl;

}
};
int main()
{
Graduate grad1("wang_li",'f',24,"assistent",89.5,1234.5);
grad1.show();
return 0;
}
2.利用一个指向基类的指针指向派生类的对象,看一下这个例子你就懂了。
#include<iostream>
#include<string>
using namespace std;
class student
{
private:
int num;
string name;
float score;
public:
student(int,string,float);
void display();
};
student::student(int n,string nam,float s):num(n),name(nam),score(s)
{}
void student::display()
{
cout<<"student的display(函数)"<<endl;
cout<<endl<<"num : "<<num<<endl;
cout<<"name: "<<name<<endl;
cout<<"score: "<<score<<endl;
}
class Graduate:public student
{
private:
float pay;
public:
Graduate(int,string,float,float);
void display();
};
Graduate::Graduate(int n,string nam,float s,float p):student(n,nam,s),pay(p)
{}

void Graduate::display()
{
cout<<"Graduate的dispaay(函数)"<<endl;
student::display();
cout<<"pay="<<pay<<endl;
}
int main()
{
student stu1(1001,"li",87.5);
Graduate grad1(2001,"wang",98.7,7865.4);
student *pt=&stu1;
pt->display();
cout<<"============================"<<endl;
pt=&grad1;
pt->display();

cout<<"============================"<<endl;
stu1=grad1;
stu1.display();
return 0;
}
在student 的void display();前面加上virtual在试试,你就会明白虚函数的作用。
百度网友a70ce28
2011-12-15 · TA获得超过992个赞
知道小有建树答主
回答量:619
采纳率:0%
帮助的人:567万
展开全部
虚基类可以规范代码的编写,对于可能出现二义性的问题中,虚基类可以消除二义性,是的代码的编写统一规范,也让统筹整个项目的人很好的策划代码实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式