• 多继承下成员访问


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

    #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;

    }

  • 相关阅读:
    一个简单的禁止鼠标滚轮事件处理
    模仿抽奖转盘,并且用cookie记录历史次数
    学习jquery
    使用var提升变量声明
    Django 自带密码加密,自定密码加密方式 及自定义验证方式
    kindEditor使用并防止xss攻击(day88)
    python二维码生成库(qrcode)简介和实例
    js原型的区别
    js中 this与that
    python单元测试之unittest框架使用总结
  • 原文地址:https://www.cnblogs.com/lidan/p/2239484.html
Copyright © 2020-2023  润新知