C++ static静态成员变量(入门必读)
C++提供了多种不同类型的类成员,其中就包括本节要讲的静态成员变量(Static Member Variables),它在某些特定场景下非常有用。
和普通的成员变量相比,静态成员变量的特别之处在于:它只有一份内存实例,不属于某一个类对象,而是被当前类的所有对象共享。
静态成员变量在类的内部声明,必须在类的外部定义和初始化,定义和初始化的时候要有类名作为前缀。举个简单的例子:
假设上面 Student 类中的 count 是 public 属性的,那么在类外部调用它的方法有两种:
C++中的静态成员变量为类提供了一种共享状态和信息的有效机制,在编写单例模式、对象计数或资源管理等方面具有一定的实用价值。
和普通的成员变量相比,静态成员变量的特别之处在于:它只有一份内存实例,不属于某一个类对象,而是被当前类的所有对象共享。
静态成员变量的定义
类中用 static 关键字修饰的成员变量,就叫做静态成员变量。静态成员变量在类的内部声明,必须在类的外部定义和初始化,定义和初始化的时候要有类名作为前缀。举个简单的例子:
class Student {
private:
static int count; //在类内部声明静态成员变量
};
// 初始化静态成员变量
int Student::count = 0;
注意,静态成员变量只能被初始化一次,并且它在整个程序执行期间一直存在。静态成员变量的使用
static 成员变量遵循正常的公有、保护和私有访问限制。对于 public 属性的静态成员变量,可以使用域操作符::直接调用它,当然类对象也可以间接调用它。假设上面 Student 类中的 count 是 public 属性的,那么在类外部调用它的方法有两种:
int n = Student::count; // ① 直接调用 Student stu; int n = stu.count // ② 间接调用推荐大家使用第一种方式。
完整实例
下面的实例使用一个名为 Student 的简单类来演示静态成员变量的使用。这个类包含一个静态成员变量 count,用于跟踪创建的 Student 对象的数量。
#include <iostream>
#include <string>
class Student {
public:
Student(std::string n) : name(n) {
++count;
}
~Student() {
--count;
}
private:
std::string name;
public:
static int count;
};
// 初始化静态成员变量
int Student::count = 0;
int main() {
std::cout << "Student::count = " << Student::count << std::endl;
Student s1("Alice");
Student s2("Bob");
std::cout << "Student::count = " << Student::count << std::endl;
{
Student s3("Charlie");
std::cout << "Student::count = " << Student::count << std::endl;
} // s3 的析构函数在这里调用
std::cout << "Student::count = " << Student::count << std::endl;
return 0;
}
运行结果为:
Student::count = 0
Student::count = 2
Student::count = 3
Student::count = 2
总结
静态成员变量在类内部声明的同时,必须在类外部进行初始化。C++中的静态成员变量为类提供了一种共享状态和信息的有效机制,在编写单例模式、对象计数或资源管理等方面具有一定的实用价值。
ICP备案:
公安联网备案: