zoukankan      html  css  js  c++  java
  • 多继承下成员访问

    编译器先解析出他对某个名称该使用哪个实例, 然后再检查实例的访问权限是否合法

    #include <complex>


    class Base1 {
    public:
        // ...
    protected:
        int ival;
        double dval;
        char cval;
        // ...
    private:
        int *id;
        // ...
    };
     
    class Base2 {
    public:
        // ...
    protected:
        float fval;
        // ...
    private:
        double dval;
        // ...
    };

    class Derived : public Base1 {
    public:
        // ...
    protected:
        string sval;
        double dval;
        // ...
    };
     
    class MI : public Derived, public Base2 {
    public:
        void foo( double dval );
        void bar();
        // ...
    protected:
        int *ival;
        complex<double> cval;
        // ...
    };

    inline void MI::foo( double dval )
    {
        int id;
        MI::cval = dval;
        //Base2::dval = 1.0; //没有访问权限
        dval = Base1::dval + Derived::dval;//虽然被覆盖了,但原来的只是隐藏, 仍然可以显示的访问
        //...
    }

    inline void MI::bar()
    {
        int sval;

        //ambiguous for dval even cannot access private member declared in class 'Base2'
        //but both Derived::dval and Base2::dval are visible in MI
        //编译器先解析出他对某个名称该使用哪个实例, 然后再检查实例的访问权限是否合法
        //dval = 3.14;
        fval = 0;
        cval = 'a';
        sval = *ival;
        //wrong cannot access private member declared in class 'Base2'
        //cannot convert from 'const int' to 'int *'
        //id = 1;

    }

  • 相关阅读:
    docker常用命令
    Jenkins 插件开发记录
    【转】python作用域
    git备忘录
    【笔记】script.sh: source: not found in docker 问题
    (转)JavaScript判断浏览器类型及版本
    (转)webstorm快捷键
    (转)javaScript call 函数的用法说明
    (转载)记录函数 getStyle() 获取元素 CSS 样式
    (转)resize扩展
  • 原文地址:https://www.cnblogs.com/lidan/p/2239484.html
Copyright © 2011-2022 走看看