天天看點

C++繼承同名成員處理方式

問題:當子類與父類出現同名的成員,如何通過子類對象,通路帶子類或父類中同名的資料?

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;
}      

更多精彩文章請關注微信公衆号:YQ程式設計,或微信掃描以下二維碼關注,還有許多IT類電子書等你來拿。

繼續閱讀