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. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

 

posted @ 2022-04-10 16:43  安静点--  阅读(86)  评论(0)    收藏  举报