码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-12-16 00:54:23      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:系统   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!