問題:當子類與父類出現同名的成員,如何通過子類對象,通路帶子類或父類中同名的資料?
1.通路子類同名成員 直接通路即可
2.通路父類同名成員 需要加作用域
代碼示例:
#include <iostream>
using namespace std;
//繼承同名成員處理方式
class Base
{
public:
Base()
{
m_A = 100;
}
void func()
{
cout << "Base-fun()調用 " << endl;
}
void func(int a)
{
cout << "Son-fun(int a)調用 " << endl;
}
int m_A;
};
class Son:public Base
{
public:
Son()
{
m_A = 200;
}
void func()
{
cout << "Son-fun()調用 " << endl;
}
int m_A;
};
void test01()
{
Son s;
cout << "Son的 m_A=" << s.m_A << endl;
//如果通過子類通路對象 通路到父類中同名成員,需要加作用域
cout << "Base的 m_A=" << s.Base::m_A << endl;
}
//同名成員函數處理
void test02()
{
Son s;
s.func(); //直接調用 調用是子類中的同名成員
//如何調用到父類中同名成員函數?
s.Base::func();
//如果子類中出現和父類同名的成員函數,子類的同名成員會隐藏掉父類中所有同名成員函數
//如果想通路到父親中被隐藏的同名成員函數,需要加作用域
s.Base::func(100);
}
int main()
{
//test01();
test02();
return 0;
}