5. 静态成员变量
静态成员变量 是类本身的变量,他属于类,不属于类的创建的对象。
静态成员变量与普通变量的区别:
- 普通成员变量:该类创建的对象各自用于一份副本,没有对象都有自己的同名成员变量。
- 静态成员变量:全局只有一个副本,该类创建的对象都共用这个变量。
静态成员变量 需要在类内声明,在类外单独定义,因此要使用静态成员变量需要在类的声明部分进行声明,同时在类外实现部分的代码处进行定义和初始化。
静态成员变量声明的语法:
class 类名{
访问说明符:
static 变量类型 变量名;
};
静态成员变量定义的语法:
静态成员变量 只有在定义时才会单独为其分配内存,并赋予初始值(如果有初始值)。
变量类型 类名::变量名[ = 初始值];
静态成员变量的使用方法
类名::变量名
// 或
对象名.变量名
示例
记录一个类创建对象的个数;
// filename: static_member_var
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
static int total_count; // 声明静态成员变量
Person(const string & n, int a): name(n), age(a) {
cout << "创建:Person(" << n << ", " << a << ");\n";
// 成员函数内使用静态成员变量
total_count++;
}
~Person(void) {
cout << "析构:~Person(" << name << ", " << age << ");\n";
total_count--;
}
private:
string name; // 姓名
int age; // 年龄
};
// 定义静态成员变量
int Person::total_count = 0;
int main(int argc, char * argv[]) {
Person p1("老魏", 35);
Person p2("魏明择", 35);
// 两种使用静态成员变量的方法
cout << "Person对象的个数:" << Person::total_count << endl;
cout << "Person对象的个数:" << p2.total_count << endl;
return 0;
}
编译和运行结果如下:
weimz@mzstudio:~$ g++ -o static_member_var static_member_var.cpp
weimz@mzstudio:~$ ./static_member_var
创建:Person(老魏, 35);
创建:Person(魏明择, 35);
Person对象的个数:2
Person对象的个数:2
析构:~Person(魏明择, 35);
析构:~Person(老魏, 35);
从上述运行结果可知,静态成员变量全局只有一个,每个对象的成员函数(包括构造函数和析构函数)都可以修改和访问这个成员变量。如果该成员变量是公有访问权限,则其他函数也可以访问这个静态成员变量。
静态成员变量通常用于记录类全局的信息,而不是对象的信息。