静态成员变量特点:
- 所有对象都共享同一份数据。
- 编译阶段即分配内存。
- 类内声明,类外初始化。
静态成员函数特点:
- 只能访问静态的成员变量,不能访问非静态成员变量。
- 所有的对象都共享同一份函数实例。
静态成员和非静态成员出现同名,处理方式一致:
- 访问子类同名成员:直接访问即可。
- 访问父类同名成员:需要加父类作用域。
#include<iostream>
using namespace std;
class Base
{
public:
static void func()
{
cout << "Base - func()调用" << endl;
}
static void func(int a)
{
cout << "Base - func(int a)调用" << endl;
}
static int m_A;
};
int Base::m_A = 100;
class Son :public Base
{
public:
static void func()
{
cout << "Son - func()调用" << endl;
}
static int m_A;
};
int Son::m_A = 1000;
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 << "Son 下 m_A = " << Base::m_A << endl;
cout << "Base 下 m_A = " << Son::Base::m_A << endl;
}
void test02()
{
// 静态函数也有两种访问方式:
// 1、通过对象调用
Son s;
s.func();
s.Base::func();
// 2、通过类名调用
Son::func();
Base::func();
Son::Base::func();
// 重载的调用: // 子类中出现和父类同名的静态成员函数,也会隐藏父类中所有同名成员函数。因此要加作用域限制。
Son::Base::func(10000);
}
int main()
{
test01();
cout << endl;
test02();
system("pause");
return 0;
}
输出:
通过对象访问:
Son 下 m_A = 1000
Base 下 m_A = 100
通过类名访问:
Son 下 m_A = 1000
Son 下 m_A = 100
Base 下 m_A = 100
Son - func()调用
Base - func()调用
Son - func()调用
Base - func()调用
Base - func()调用
Base - func(int a)调用