繼承同名靜態成員處理方式
阿新 • • 發佈:2021-02-02
問題:繼承中同名的靜態成員在子類物件上如何進行訪問?
靜態成員和非靜態成員出現同名,處理方式一致。
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類電子書等你來拿。