限定作用域 + 保持变量内容持久化
静态成员
#include <iostream>
using namespace std;
class Box {
public:
static int Count;
Box() {
Count++;
}
};
int Box::Count = 0;
int main(void) {
Box Box1 = Box();
Box Box2 = Box();
cout << Box::Count << endl; // 2
return 0;
}
静态成员函数
this
指针。您可以使用静态成员函数来判断类的某些对象是否已被创建。静态成员函数与普通成员函数的区别:
- 静态成员函数没有
this
指针,只能访问静态成员(包括静态成员变量和静态成员函数);- 普通成员函数有
this
指针,可以访问类中的任意成员。
#include <iostream>
using namespace std;
class Box {
public:
static int Count;
Box() {
Count++;
}
static int getCount(); // 增加了类的访问权限的全局函数
};
// 实现的时候不需要 static,因为 static 是声明性关键字
int Box::Count = 0;
int Box::getCount() {
return Count;
}
int main(void) {
cout << Box::getCount() << endl; // 0
Box Box1 = Box();
Box Box2 = Box();
cout << Box::getCount() << endl; // 2
return 0;
}
只在 cpp
内有效的全局变量 static int val = 0;
cpp
内有效,其他的 cpp
文件不能访问这个变量cpp
文件声明了同名的全局静态变量,那么他们实际上是独立的两个变量;只在 cpp
内有效的全局函数
static
修饰,那么这个函数只可在本 cpp
内使用,不会同其他 cpp
中的同名函数引起冲突;static
的全局函数,不要在 cpp
内声明非 static
的全局函数,如果你要在多个 cpp
中复用该函数,就把它的声明提到头文件里去,否则 cpp
内部声明需加上 static
修饰;