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

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

    示例:

    1. class Base {
    2. public:
    3. Base()
    4. {
    5. m_A = 100;
    6. }
    7. void func()
    8. {
    9. cout << "Base - func()调用" << endl;
    10. }
    11. void func(int a)
    12. {
    13. cout << "Base - func(int a)调用" << endl;
    14. }
    15. public:
    16. int m_A;
    17. };
    18. class Son : public Base {
    19. public:
    20. Son()
    21. {
    22. m_A = 200;
    23. }
    24. //当子类与父类拥有同名的成员函数,子类会隐藏父类中所有版本的同名成员函数
    25. //如果想访问父类中被隐藏的同名成员函数,需要加父类的作用域
    26. void func()
    27. {
    28. cout << "Son - func()调用" << endl;
    29. }
    30. public:
    31. int m_A;
    32. };
    33. void test01()
    34. {
    35. Son s;
    36. cout << "Son下的m_A = " << s.m_A << endl;
    37. cout << "Base下的m_A = " << s.Base::m_A << endl;
    38. s.func();
    39. s.Base::func();
    40. s.Base::func(10);
    41. }
    42. int main() {
    43. test01();
    44. system("pause");
    45. return EXIT_SUCCESS;
    46. }

    总结:

    1. 子类对象可以直接访问到子类中同名成员
    2. 子类对象加作用域可以访问到父类同名成员
    3. 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

    继承中同名静态成员处理方式和非静态成员的处理方式一致,访问父类同名成员,需要加上父类的作用域。