问题:继承中同名的静态成员在子类对象如何访问?
静态成员和非静态成员出现同名,处理方式一致
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;//1.通过对象访问cout << "Son 下 m_A = " << s.m_A << endl;cout << "Base 下 m_A = " << s.Base::m_A << endl;//2.通过类名访问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;//1.通过对象访问s.func();s.Base::func();//2.通过类外访问Son::func();Base::func();Son::Base::func();Son::Base::func(100);}int main() {test01();return 0;
}
如果子类出现与父类同名的一个静态成员函数,则父类中所有的与子类同名的函数都会被隐藏掉,调用父类同名函数时前面需要加作用域才能调用。