#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;
}
继承中的静态成员特性
静态成员函数和非静态成员函数的共同点:
- 他们都可以被继承到派生类中。
- 如果重新定义一个静态成员函数,所有在基类中的其他重载函数会被隐藏。
- 如果我们改变基类中一个函数的特征,所有使用该函数名的基类版本都会被隐藏。