在C++的类里面可以定义静态成员变量和静态成员函数,静态成员属于整个类所有,不依赖任何对象,可以通过类名和对象名两种方式访问public静态成员。
静态成员变量的定义:
通过static关键字修饰,需要在类外单独分配空间,在全局数据区。形式为:Type Classname::varname;
类的所有对象共享静态成员,因此在统计类的对象个数时可以使用静态成员变量:
#include <iostream>
class Test
{
private:
static int count;
public:
Test()
{
count++;
}
~Test()
{
count--;
}
static int GetCount()
{
return count;
}
};
int Test::count = 0;
int main()
{
Test t1;
Test t2;
std::cout<<"The number of Objects: "<<Test::GetCount()<<std::endl;
Test t[10];
std::cout<<"The number of Objects: "<<Test::GetCount()<<std::endl;
return 0;
}
静态成员函数和普通成员函数的区别:
静态成员函数不包含指向具体对象的指针;普通成员函数包含一个指向具体对象的指针。
public静态成员函数可以直接由类名访问,普通成员函数只能由对象访问。
应用:用于对象数目的控制,这里控制程序里只能有一个该类类型的对象:
#include <iostream>
using namespace std;
class singletom
{
private:
static singletom* count;
singletom()
{
cout<<"I'm a private singletom()"<<endl;
}
public:
static singletom* getObjetc()
{
if(count == NULL)
{
count = new singletom;
}
return count;
}
~singletom()
{
//delete count; //这里不能删除这个静态指针成员变量
}
};
singletom* singletom::count = NULL;
int main()
{
singletom *s1 = singletom::getObjetc();
singletom *s2 = singletom::getObjetc();
singletom *s3 = singletom::getObjetc();
cout<<s1<<"\t"<<s2<<"\t"<<s3<<endl;
return 0;
}
打印出的s1,s2,s3的值是一样的,都指向了同一个对象。