码迷,mamicode.com
首页 > 其他好文 > 详细

静态成员函数

时间:2017-11-06 11:13:51      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:c++   静态成员   静态成员函数   

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

class Person {

private:
	char* name;
	int age;
	char* work;

public:
	Person(){
	
	}

	Person(char* name, int age, char* work = "none") {

		this->name = name;
		this->age = age;
		this->work = work;
	}
	void printInfo() {

		cout << "name = " << name << " age = " << age << " work = " << work << endl;
	}
	~Person() {

		delete this->name;
		delete this->work;
	}

};

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

int main()
{
	Person per1;
	Person per2;
	Person per3;
	Person per5;
	Person per[100];

	Person* per4 = new Person("chentong", 20, "student");

	system("pause");
	return 0;
}

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

private:
     int cnt;

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

private:
    static int cnt;

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

static int getCnt() {   //第一种写法

    return cnt;
}

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

   因此,

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

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

int Person::getCnt() {

	return cnt;
}

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

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

class Person {

private:
	static int cnt;
	char* name;
	int age;
	char* work;

public:
	Person() {

		cnt++;
	}

	Person(char* name, int age, char* work = "none") {

		this->name = name;
		this->age = age;
		this->work = work;
		cnt++;
	}
	void printInfo() {

		cout << "name = " << name << " age = " << age << " work = " << work << endl;
	}
	/*static int getCnt() {   //第一种写法

		return cnt;
	}*/
	static int getCnt();    //第二种写法
	~Person() {

		delete this->name;
		delete this->work;
	}

};

int Person::cnt = 0;  //定义和初始化静态数据成员

int Person::getCnt() {

	return cnt;
}

int main()
{
	Person per1;
	Person per2;
	Person per3;
	Person per5;
	Person per[100];

	Person* per4 = new Person("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");
	return 0;
}


本文出自 “梵高说我脑子有病” 博客,请务必保留此出处http://chen0547.blog.51cto.com/12489941/1979189

静态成员函数

标签:c++   静态成员   静态成员函数   

原文地址:http://chen0547.blog.51cto.com/12489941/1979189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!