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;

    }

  • 相关阅读:
    .NET ------ 多线程的简单使用
    .NET --- 页面刷新(html 和 js两种方式)
    .NET ---- B/S的特点,不接收js赋值
    二分查找与二分答案
    c++运行程序 鼠标点击按钮 (c++)(windows)
    c++运行程序 光标隐藏与移动 (c++)(windows)
    推荐:史蒂芬霍金论天道
    LaTeX公式学习
    Markdown语法学习
    文言语言!!!(附c/c++自译)
  • 原文地址:https://www.cnblogs.com/lidan/p/2239484.html
Copyright © 2011-2022 走看看