#include <iostream>
class widget
{
public:
widget() {
count++;
}
~widget() {
--count;
}
static int num() {
return count;
}
private:
static int count;
};
int widget::count = 0;
int main() {
widget x, y;
std::cout << "Num is : " << widget::num() << std::endl;
if (widget::num() > 1) {
widget x, y, z;
std::cout << "Num is : " << widget::num() << std::endl;
}
widget z;
std::cout << "Num is : " << widget::num() << std::endl;
return 0;
}
解析:
类widget有一个静态成员count和一个静态方法num()。类中的静态成员或者方法不属于类的实例,而属于类本身并在所有类的实例间共享。在调用它们时应该用类名加上操作符"::"来引用。
在上面的代码中,widget构造方法中,把静态成员count的值加一,在widget的析构方法中,把静态成员count的值减一。
当程序运行到第一次打印的时候,只有两个类widget实例,count = 2;运行到第二次打印的时候,又产生三个实例,count = 3;在运行到第三次打印的时候,运行到if判断结束后,前面增加的三个实例销毁,同时又增加一个,count = 3;
结果:
Num is : 2
Num is : 5
Num is : 3