假如说我现在有一个类,我创建了很多类对象。而我想知道我到底创建了多少个类对象,我该怎么做呢?

classPerson{private:char*name;intage;char*work;public:Person(){}Person(char*name,intage,char*work="none"){this->name=name;this->age=age;this->work=work;}voidprintInfo(){cout<<"name="<<name<<"age="<<age<<"work="<<work<<endl;}~Person(){deletethis->name;deletethis->work;}};

现在,我开始创建类对象,

intmain(){Personper1;Personper2;Personper3;Personper5;Personper[100];Person*per4=newPerson("chentong",20,"student");system("pause");return0;}

很明显,我总共创建了105个类对象。我想要统计我有多少个类对象,很明显,我得有一个统计用的变量。

private:intcnt;

如果我直接像这样在类中放一个变量cnt,那么我每创建一个对象,它都会有一个cnt出现,而这样并不能解决统计对象个数的问题。为此,C++中引入了静态成员变量这样一个概念来解决这个问题。这个静态成员变量它是属于一个类,而不属于某一个具体的对象。所以,在类中,我使用关键字static来申请一个静态成员变量。

private:staticintcnt;

因为,这个变量是类的私有变量,外部无法直接对其进行操作,所以,需要一个函数来解决操作问题。操作静态成员变量的函数,被称作是静态成员函数。

staticintgetCnt(){//第一种写法returncnt;}

因为每创建一个对象都会调用构造函数,所以我只需要在构造函数内对cnt进行自增就可以了。但是现在,还有一个问题,我只是在类中声明了一个静态成员变量,它只是从逻辑上存在了,并没有实际占用内存空间,所以,我得对cnt进行赋初值操作。怎么做呢?首先,必须肯定的是,对静态变量初始化的操作一定要在对象被创建之前,所以,静态变量的初始化一定要在类外实现,

因此,

intPerson::cnt=0;//放在类外,就不需要加static了

当然,类内可以只写静态成员函数的定义,实现,放在类外,写法如下:

intPerson::getCnt(){returncnt;}

同样的,函数的功能实现,放在类外就不需要加static了。

然后就是,完整代码,代码如下:

classPerson{private:staticintcnt;char*name;intage;char*work;public:Person(){cnt++;}Person(char*name,intage,char*work="none"){this->name=name;this->age=age;this->work=work;cnt++;}voidprintInfo(){cout<<"name="<<name<<"age="<<age<<"work="<<work<<endl;}/*staticintgetCnt(){//第一种写法returncnt;}*/staticintgetCnt();//第二种写法~Person(){deletethis->name;deletethis->work;}};intPerson::cnt=0;//定义和初始化静态数据成员intPerson::getCnt(){returncnt;}intmain(){Personper1;Personper2;Personper3;Personper5;Personper[100];Person*per4=newPerson("chentong",20,"student");cout<<"cnt="<<Person::getCnt()<<endl;cout<<"per[1].cnt="<<per[1].getCnt()<<endl;cout<<"per[2].cnt="<<per[2].getCnt()<<endl;system("pause");return0;}