问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?
(一)同名成员属性处理方式
#include<iostream>using namespace std;class Base{public:Base(){m_A = 100;}int m_A;};class Son : public Base{public:Son(){m_A = 200;}int m_A;};void test01(){//继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反Son s;}int main() {test01();system("pause");return 0;}
访问子类同名成员,直接访问即可
void test01()
{//继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反Son s;cout<<"Son m_A="<<s.m_A<<endl;
}
访问父类同名成员,需要在类名后面加作用域
void test01(){//继承中 先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反Son s;cout << "Base m_A=" << s.Base::m_A << endl;}
(二)同名成员函数调用
也是一样的,需要加作用域
#include<iostream>using namespace std;class Base{public:void func(){cout << "base成员函数的调用" << endl;}int m_A;};class Son : public Base{public:void func(){cout << "son成员函数的调用" << endl;}int m_A;};void test01(){Son s;s.func();s.Base::func();}int main() {test01();system("pause");return 0;}
效果图:
额外:同名成员函数重载
效果图:
当子类与父类拥有相同名称的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数