如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论从基类派生出多少个派生类,对于每个静态成员来说都只存在唯一的实例。
问题:继承中同名的静态成员在子类对象上如何进行访问?
静态成员和非静态成员出现同名,初理方式一致
- 访问子类同名成员,直接访问即可
- 访问父类同名成员,需要加作用域
class Base
{
public:
static int m_A;
static void func()
{
cout << "Base" << endl;
}
};
int Base::m_A = 100;//类内声明,类外初始化
//公共继承
class Son :public Base
{
public:
static int m_A;
static void func()
{
cout << "Son" << endl;
}
};
int Son::m_A = 200;
void test01()
{
//1.通过对象访问
Son s;
cout << "Son:m_A = " << s.m_A << endl;//200
cout << "Base:m_A = " << s.Base::m_A << endl;//100
//2.通过类名访问
cout << "Son:m_A = " << Son::m_A << endl;
//第一个::代表通过类名访问 第二个::代表访问父类作用域下
cout << "Base:m_A = " << Son::Base::m_A << endl;
}
void test02()
{
//通过对象访问:
Son s;
s.func();//直接调用的是子类中的
s.Base::func();//加作用域可以调用到父类的
//通过类名访问
Son::func();
Son::Base::func();
}