1. 程式人生 > 其它 >c++繼承同名靜態成員處理方式

c++繼承同名靜態成員處理方式

繼承同名靜態成員處理方式

問題:繼承中同名的靜態成員在子類物件上如何進行訪問?

靜態成員和非靜態成員出現同名,處理方式一致

  • 訪問子類同名成員 直接訪問即可
  • 訪問父類同名成員 需要加作用域

示例:

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

總結:同名靜態成員處理方式和非靜態處理方式一樣,只不過有兩種訪問的方式(通過物件 和 通過類名)