C++繼承同名成員處理方式
阿新 • • 發佈:2021-02-02
問題:當子類與父類出現同名的成員,如何通過子類物件,訪問帶子類或父類中同名的資料?
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;
}
總結:
1.子類物件可以直接訪問到子類中的同名成員。
2.子類物件家作用域可以訪問到父類同名成員。
3.當子類與父類擁有同名的成員函式,子類會隱藏父類中同名成員函式,加作用域可以訪問到父親中同名函式。