c++繼承同名靜態成員處理方式
阿新 • • 發佈:2022-04-10
繼承同名靜態成員處理方式
問題:繼承中同名的靜態成員在子類物件上如何進行訪問?
靜態成員和非靜態成員出現同名,處理方式一致
- 訪問子類同名成員 直接訪問即可
- 訪問父類同名成員 需要加作用域
示例:
class Base { public: static void func() { cout << "Base - static void func()" << endl; } static void func(int a) { cout << "Base - static void func(int a)" << endl; } static int m_A; }; int Base::m_A = 100; class Son : public Base { public: static void func() { cout << "Son - static void func()" << endl; } static int m_A; }; int Son::m_A = 200; //同名成員屬性 void test01() { //通過物件訪問 cout << "通過物件訪問:" << endl; Son s; cout << "Son 下 m_A = " << s.m_A << endl; cout << "Base 下 m_A = " << s.Base::m_A << endl; //通過類名訪問 cout << "通過類名訪問: " << endl; cout << "Son 下 m_A = " << Son::m_A << endl; cout << "Base 下 m_A = " << Son::Base::m_A << endl; } //同名成員函式 void test02() { //通過物件訪問 cout << "通過物件訪問: " << endl; Son s; s.func(); s.Base::func(); cout << "通過類名訪問: " << endl; Son::func(); Son::Base::func(); //出現同名,子類會隱藏掉父類中所有同名成員函式,需要加作作用域訪問 Son::Base::func(100); } int main() { //test01(); test02(); system("pause"); return 0; }
總結:同名靜態成員處理方式和非靜態處理方式一樣,只不過有兩種訪問的方式(通過物件 和 通過類名)