生活随笔
收集整理的這篇文章主要介紹了
C++继承同名静态成员处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:繼承中同名的靜態成員在子類對象如何訪問?
靜態成員和非靜態成員出現同名,處理方式一致
1.訪問子類同名成員 直接訪問即可
2.訪問父類同名成員 需要加作用域
首先我們先介紹一下靜態成員屬性的特點:
1.編譯階段分配內存
2.所有對象共享同一份數據
3.類內聲明,類外初始化
一、同名靜態成員屬性
代碼如下:
#include <iostream>
using namespace std
;
class Base {public:static int m_A
;
};
int Base
::m_A
= 100;class Son: public Base
{public:static int m_A
;
};
int Son
::m_A
= 200;
void test01() {Son s
;cout
<< "Son 下 m_A = " << s
.m_A
<< endl
;cout
<< "Base 下 m_A = " << s
.Base
::m_A
<< endl
;cout
<< "Son 下 m_A = " << Son
::m_A
<< endl
;cout
<< "Base 下 m_A = " << Base
::m_A
<< endl
;cout
<< "通過子類訪問父類m_A = " << Son
::Base
::m_A
<< endl
;}int main() {test01();return 0;
}
二、同名靜態成員函數
代碼如下:
#include <iostream>
using namespace std
;
class Base {public:static int m_A
;static void func() {cout
<< "Base static void func()" << endl
;}static void func(int a
) {cout
<< "Base static void func(int a)" << endl
;}
};
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() {Son s
;s
.func();s
.Base
::func();Son
::func();Base
::func();Son
::Base
::func();Son
::Base
::func(100);}int main() {test01();return 0;
}
如果子類出現與父類同名的一個靜態成員函數,則父類中所有的與子類同名的函數都會被隱藏掉,調用父類同名函數時前面需要加作用域才能調用。
總結
以上是生活随笔為你收集整理的C++继承同名静态成员处理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。