错误的模糊应用(类继承问题)

当继承关系出现菱形继承时,可能出现二义性

当类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访问基类的成员变量时无二义性错误。

 

posted @ 2018-12-16 00:07  醉画仙  阅读(201)  评论(0编辑  收藏  举报