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

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

技術標籤:C++繼承C++靜態成員

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

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

1.訪問子類同名成員 直接訪問即可

2.訪問父類同名成員 需要加作用域

程式碼示例:

#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 int m_A; static void func() { cout << "Son-static void func()"
<< endl; } static void func(int a) { cout << "Base-static void func(int a)" << endl; } }; int Son::m_A = 200; //同名靜態成員屬性 void test01() { //1.通過物件訪問 cout << "通過物件訪問:" << endl; Son s; cout <<
"Son m_A=" << s.m_A << endl; cout << "Base m_A=" << s.Base::m_A<< endl; //2.通過類名訪問 cout << "通過類名訪問:" << endl; cout << "Son m_A=" << Son::m_A << endl; //第一個::代表通過類名方式訪問 第二個::代表訪問父類作用域下 cout << "Base m_A=" << Son::Base::m_A << endl; } //同名靜態成員函式 void test02() { //1.通過物件訪問 cout << "通過物件訪問" << endl; Son s; s.func(); s.Base::func(); //2.通過類名訪問 cout << "通過類名訪問" << endl; Son::func(); Son::Base::func(); //子類出現和父類同名的靜態成員函式,也會隱藏父類中所有同名成員函式 //如果想訪問父類中被隱藏的同名成員,需要加作用域 Son::Base::func(100); } int main() { //test01(); test02(); return 0; }

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

更多精彩文章請關注微信公眾號:YQ程式設計,或微信掃描以下二維碼關注,還有許多IT類電子書等你來拿。
在這裡插入圖片描述