静态成员(包括类的成员变量和成员函数),即在类的成员,前面加上 static 关键字。
一、静态成员的特点:
静态成员变量
- 所有对象共享同一份数据(对象中改变数据,那么该变量数据也随之改变);
- 在编译阶段分配内存;
- 类内内声明,类外初始化(类外初始化时要加作用域);
静态成员函数
- 所有对象共享同一个函数;
- 静态成员函数只能访问静态成员;
二、访问方式
- 使用作用域运算符直接访问静态成员;
- 实用类的对象、引用和指针来访问静态成员变量;
三、私有权限,类外访问不到
四、静态成员函数与普通成员函数的区别
- 静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数);
- 普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针;
五、实例
/**************************实例**************************/
#include<iostream>
using namespace std;
class Practice{
public:
static int m_A; // 类内声明静态成员变量
static void Print(){ // 静态成员函数
cout << "静态成员函数调用!" << endl;
cout << "m_A:" << m_A << endl;
cout << "m_B:" << m_B << endl;
// 出错,静态成员函数不能访问非静态成员变量
// cout << "m_C:" << m_C << endl;
}
int m_C = 10;
private:
static int m_B;
};
int Practice::m_A = 5; // 类外初始化静态成员变量
int Practice::m_B = 10;
int main(){
// 1、使用类的对象调用静态成员变量
Practice p1;
cout << p1.m_A++ << endl; // 输出5
// 2、使用作用域直接访问静态成员变量
cout << Practice::m_A << endl; // 输出6
// 出错,m_B私有权限,类外访问不到
// cout << Practice::m_B << endl;
// 所有对象共享一份数据
Practice p2;
cout << p2.m_A + 1 << endl; // 输出7
p2.Print();
return 0;
}