标签:系统 ring space chinese 访问 return cpp 定义 man
当继承关系出现菱形继承时,可能出现二义性

当类me访问基类human的公共变量成员时,系统将不知道通过哪个上一层类访问该成员变量,因为Chinese和woman都从human继承了成员变量,此二义性错误。
【实现过程】
上述二义性现象可以通过虚继承避免,它的格式如下:
class A
{};
class B virtual public A
{};
本实例实现的具体代码如下:
#include<iostream>
#include<string>
using namespace std;
class human
{
public:
bool getBeauty()
{
return m_beauty;
}
bool m_beauty;
};
class Chinese:virtual public human
{
};
class woman:virtual public human
{
};
class me:public Chinese,public woman
{
public:
me(bool a)
{
m_beauty=a;
}
};
void main()
{
me _me(true);
cout<<_me.getBeauty()<<endl;
}
【代码解析】
第04~12行是基类human的定义体,其中有成员变量m_beauty和成员函数getBeauty()。第13~18行是子类Chinese和woman,虚继承自基类human。第19~26行是类me多继承与Chinese和woman。由于虚继承,所以当类me的对象_me访问基类的成员变量时无二义性错误。
标签:系统 ring space chinese 访问 return cpp 定义 man
原文地址:https://www.cnblogs.com/0405mxh/p/10125478.html