zoukankan      html  css  js  c++  java
  • 错误的模糊应用(类继承问题)

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

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

  • 相关阅读:
    MYSQL: 什么是MYSQLD Service
    100 logging模块
    099 hashlib和hmac模块
    098 json和pickle模块
    097 sys模块
    096 os模块
    095 random模块
    094 datetime模块
    093 time模块
    092 模块基础实战之ATM和购物车系统分文件处理
  • 原文地址:https://www.cnblogs.com/0405mxh/p/10125478.html
Copyright © 2011-2022 走看看