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;

    }

  • 相关阅读:
    light oj 1007
    51nod 1298 圆与三角形
    codeforces 899C Dividing the numbers
    zznu 1996 : 正三角形和圆的爱情
    zznu 2081 : 舰队管理
    zzun 2076 : 三花聚顶神功
    zznu 2054 : 油田
    机械设备--第九届省赛--深搜
    设计模式-单例模式、工厂模式
    Spring Boot 遇到空指针
  • 原文地址:https://www.cnblogs.com/lidan/p/2239484.html
Copyright © 2011-2022 走看看