C++——static成员
类中用static修饰的成员变量称为静态成员变量,用static修饰的成员函数称为静态成员函数。它们的声明方式与普通变量和函数的声明方式差不多,只是前面多了一个static进行修饰。
class Count
{
public:Count(){}//静态成员函数static int GetCount(){return _count;}private:static int _count;//静态成员变量声明
};
一、静态成员变量
类里面的成员变量只是声明,静态成员变量和普通成员变量的初始化方式不同。普通成员变量在构造函数里初始化,而静态成员变量需要在类外面单独初始化。初始化时在静态成员变量前面加上类域,且初始化时不加static关键字。
这时候就要奇怪了,为什么该变量被private修饰,却可以在类外通过指定类域初始化?别奇怪,因为C++就是这样规定的,做个遵守规则的人。但是,虽然可以以这种方式初始化,但是在类外面不能用Count::_count来访问变量。就当静态成员变量的初始化是个例就好。
class Count
{
public:Count(){}//静态成员函数static int GetCount(){return _count;}private:static int _count;//静态成员变量声明
};int Count::_count = 0;//在类外单独定义
还有一个区别是:普通成员变量属于每一个类对象,存储在对象里面;静态成员变量属于类,不依赖于任何对象存在,所有对象共享同一数据。因此,静态成员变量不能在初始化列表里定义。
二、静态成员函数
它有两个很大的特点:
1.无this指针,所以只能访问静态成员,不能访问非静态成员;
2.可以直接通过类名::静态成员函数名调用,无需对象实例化。
int main()
{int ret = Count::GetCount();return 0;
}