#include <iostream>
using namespace std;
// 父类
class Base07{
public:
static int m_a; // 静态成员,类内定义
static void fun(){
cout << "Base中的fun"<< endl;
}
static void fun(int a){
cout << "Base中的fun(int a)"<< endl;
}
};
int Base07::m_a = 10; // 静态成员,类外初始化
// 子类
class Son07 : public Base07{
public:
static int m_a; // 静态成员,类内定义
static void fun(){
cout << "son中的fun"<< endl;
}
};
int Son07::m_a = 20; // 静态成员,类外初始化
int main()
{
Son07 s1;
// 静态成员变量
// 同名成员,就近原则
// 1.通过对象访问
cout << "子类中的m_a: " << s1.m_a << endl;
cout << "父类中的m_a: " << s1.Base07::m_a << endl;
cout << "-----------------" << endl;
// 2.通过类名访问
cout << "子类中的m_a: " << Son07::m_a << endl;
cout << "父类中的m_a: " << Son07::Base07::m_a << endl;
cout << "父类中的m_a: " << Base07::m_a << endl;
cout << "*****************" << endl;
// 静态成员函数
// 同名成员,就近原则
// 1.通过对象访问
s1.fun();
s1.Base07::fun();
cout << "-----------------" << endl;
// 2.通过类名访问
Son07::fun();
Son07::Base07::fun();
cout << "-----------------" << endl;
// 子类中定义了和父类同名的成员函数,父类的同名成员函数都会被隐藏。可以通过作用域来调用
// s1.fun(10); // 无法调用
s1.Base07::fun(10);
return 0;
}
继承中的静态成员特性
静态成员函数和非静态成员函数的共同点:
- 他们都可以被继承到派生类中。
- 如果重新定义一个静态成员函数,所有在基类中的其他重载函数会被隐藏。
- 如果我们改变基类中一个函数的特征,所有使用该函数名的基类版本都会被隐藏。