#include<iostream>
using namespace std;
class Rect {
public:
Rect() {
count++;
}
~Rect() {
count--;
}
static int getCount() { // 静态成员函数
return count;
}
private:
int width;
int length;
static int count; // 静态成员变量count来计数
};
//int Rect::count = 0; 取消注释才不会编译出错
int main()
{
Rect rect1;
cout << "The count of Rect: " << Rect::getCount() << endl;
Rect rect2(rect1); // 新的对象需要使用老的对象来进行初始化
cout << "The count of Rect: " << Rect::getCount() << endl;
return 0;
}
静态全局变量不能被其他文件所用,因而其他文件能够定义相同名字的变量,而不会发生冲突。程序在内存中的四个位置:代码区,全局数据区,堆区,栈区。在静态局部变量前加static关键字,就定义了静态局部变量。特点是:
- 该变量在全局数据区分配内存。
- 始终驻留在全局数据区,直到程序结束,但其作用域为全局作用域,当定义它的函数或者语句块结束的时候,作用域结束。
- 静态成员在使用之前必须初始化,否则链接会出错。
一般情况下,类的静态成员变量不能在类内进行初始化.
- 静态数据成员不属于任何一个对象,因此并不是在创建对象的时候被定义的,这就意味着,他们并不是由类的构造函数初始化的。
- 必须在类的外部定义和初始化每个静态成员,定义时使用类作用域运算符。