1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- //4.6.5 继承同名成员处理方式
- //问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢?
- //⚪访问子类中的同名成员 直接访问即可
- //⚪访问父类中的同名成员 需要加作用域
- #include <iostream>
- class Base
- {
- public:
- Base()
- {
- m_A = 100;
- }
- void func()
- {
- std::cout << "Base - func()调用" << std::endl;
- }
- void func(int a)
- {
- std::cout << "Base - func(int a)调用" << std::endl;
- }
- int m_A;
- };
- class Son :public Base
- {
- public:
- Son()
- {
- m_A = 200;
- }
- void func()
- {
- std::cout << "Son - func()调用" << std::endl;
- }
- int m_A;
- };
- void test01()
- {
- Son s;
- std::cout << "Son m_A = " << s.m_A << std::endl;
- //如果通过子类对象 访问到父类中同名成员,需要加作用域
- std::cout << "Base m_A = " << s.Base::m_A << std::endl;
- }
- //同名成员函数处理
- void test02()
- {
- Son s;
- s.func(); //直接调用 调用的是子类中的同名成员
- //如何调用到父类中的同名成员函数?
- s.Base::func();
- //如果子类中出现了和父类中同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
- //如果想访问到父类中被隐藏的童名成员函数,需要加作用域
- s.Base::func(100);
- }
- int main()
- {
- //test01();
-
- test02();
- system("pause");
- return 0;
- }
- //总结:
- //1、子类对象可以直接访问到子类中的同名成员 s.m_A
- //2、子类对象加作用域可以访问到父类同名成员 s.Base::m_A
- //3、当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数
|