错误的模糊应用(类继承问题)
当继承关系出现菱形继承时,可能出现二义性
当类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访问基类的成员变量时无二义性错误。