91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

靜態成員函數

發布時間:2020-07-03 04:51:35 來源:網絡 閱讀:566 作者:BarnabyRoss 欄目:編程語言

   假如說我現在有一個類,我創建了很多類對象。而我想知道我到底創建了多少個類對象,我該怎么做呢?

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;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岚皋县| 兴文县| 科技| 闽清县| 崇义县| 栾城县| 道孚县| 延长县| 永丰县| 中宁县| 黑河市| 蕲春县| 黄龙县| 临泽县| 台安县| 安义县| 宜州市| 凤冈县| 龙胜| 高台县| 和田县| 张家川| 武强县| 虞城县| 钦州市| 陇南市| 中江县| 华池县| 千阳县| 龙川县| 高邑县| 蓬安县| 深圳市| 吉林市| 南木林县| 五莲县| 鸡泽县| 屏东县| 营口市| 遂溪县| 夏河县|