• c++继承同名成员处理方式 安静点


    继承同名成员处理方式

    问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?

    • 访问子类同名成员 直接访问即可
    • 访问父类同名成员 需要加作用域

    示例:

    class BaseTest {
    public:
        BaseTest()
        {
            m_A = 100;
        }
    
        void func()
        {
            cout << "BaseTest - func()调用" << endl;
        }
    
        void func(int a)
        {
            cout << "BaseTest - func(int a)调用" << endl;
        }
    
    public:
        int m_A;
    };
    
    
    class Son : public BaseTest {
    public:
        Son()
        {
            m_A = 200;
        }
    
        //当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数
        //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
        void func()
        {
            cout << "Son - func()调用" << endl;
        }
    public:
        int m_A;
    };
    
    void test01()
    {
        Son s;
    
        cout << "Son下的m_A = " << s.m_A << endl;
        //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
        cout << "Base下的m_A = " << s.BaseTest::m_A << endl;
    
        s.func();
        //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
        s.BaseTest::func();
        //当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数
        //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
        s.BaseTest::func(10);
    
    }
    int main() {
    
        test01();
    
        system("pause");
        return EXIT_SUCCESS;
    }

    总结:

    1. 子类对象可以直接访问到子类中同名成员
    2. 子类对象加作用域可以访问到父类同名成员
    3. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数
  • 相关阅读:
    WSGI学习系列WSME
    Murano Weekly Meeting 2015.08.11
    Trace Logging Level
    OpenStack Weekly Rank 2015.08.10
    markdown语法测试集合
    css-定位
    html图像、绝对路径和相对路径,链接
    html块、含样式的标签
    html标题、段落、换行与字符实体
    html概述和基本结构
  • 原文地址:https://www.cnblogs.com/anjingdian/p/16126480.html
Copyright © 2020-2023  润新知