//4.6.5 继承同名成员处理方式 //问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据呢? //⚪访问子类中的同名成员 直接访问即可 //⚪访问父类中的同名成员 需要加作用域 #include 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、当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数