问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或父类中同名的数据?
(一)同名成员属性处理方式
#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;
}
效果图:
额外:同名成员函数重载
效果图:
当子类与父类拥有相同名称的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数