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;

    }

  • 相关阅读:
    JQuery DOM操作
    JQuery 选择器和事件
    LinQ 组合查分页
    LinQ
    web 图片验证码 验证
    Web 上传图片加水印
    Web 组合查询加 分页
    ajax连接数据库加载+三级联动
    jq动画
    jq基础
  • 原文地址:https://www.cnblogs.com/lidan/p/2239484.html
Copyright © 2011-2022 走看看