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

溫馨提示×

溫馨提示×

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

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

C++類的靜態數據成員和靜態成員函數怎么用

發布時間:2021-09-06 14:42:27 來源:億速云 閱讀:167 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“C++類的靜態數據成員和靜態成員函數怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“C++類的靜態數據成員和靜態成員函數怎么用”這篇文章吧。

靜態數據成員

·用關鍵字static聲明

·當聲明類的數據成員為靜態時,無論創建多少個類的對象,靜態成員都只有一個副本

·在類的所有對象中共享,具有靜態生存期

·若不存在其他的初始化語句,在創建第一個對象時,所有的靜態數據成員被初始化為零

·在類外定義和初始化,用范圍解析運算符(::)來指明所屬的類

舉例:

#include <iostream>
using namespace std;

class Box {
public:
	static int count;    //若該靜態數據成員在private部分聲明,則只能通過靜態成員函數處理
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout << "One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;	//每創建一個對象時加1
	}
	double Volume() {
		return length * width * height;
	}
	~Box() { count--; }
private:
	double length, width, height;
};
//初始化類Box的靜態成員
int Box::count = 0;

int main(void) {
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	cout << "Total objects: " << Box::count << endl;	//輸出對象的總數
	return 0;
}

靜態成員函數

把成員函數聲明為靜態的,就可以把函數與類的任何特定對象獨立開來

·在類對象不存在的情況下也能被調用,使用類名加范圍解析運算符 :: 即可訪問

·靜態成員函數只能訪問靜態成員數據、其他靜態成員函數和類外部的其他函數

·靜態成員函數有一個類范圍,不能訪問類的 this 指針,可以使用靜態成員函數來判斷類的某些對象是否已被創建

·用靜態成員函數訪問非靜態成員,需通過對象

舉例:

#include <iostream>
using namespace std;

class Box {
public:
	static int count;
	Box(double l = 2.0, double b = 2.0, double h = 2.0) {
		cout <<"One constructor was called." << endl;
		length = l, width = b, height = h;
		count++;
	}
	double Volume() {
		return length * width * height;
	}
	static int getCount() {	//靜態成員函數 
		return count;
	}
private:
	double length, width, height;
};
int Box::count = 0;

int main(void) {
	//在創建對象之前輸出對象的總數
	cout << "Inital Stage Count: " << Box::getCount() << endl;
	
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(8.5, 6.0, 2.0);
	
	//在創建對象之后輸出對象的總數
	cout << "Final Stage Count: " << Box::getCount() << endl;
	return 0;
}

注:

靜態成員函數與普通成員函數的區別:

·靜態成員函數沒有 this 指針,只能訪問靜態成員(包括靜態成員變量和靜態成員函數)

·普通成員函數有 this 指針,可以訪問類中的任意成員;而靜態成員函數沒有 this 指針

使用靜態成員了解構造與析構函數的調用情況

#include <iostream>
using namespace std;

class A {
	friend class B;	//類B是類A的友元 
public:
	static int value;
	static int num;
	A(int x, int y) {
		xp = x, yp = y;
		value++;
		cout << "調用構造:" << value << endl;
	}
	void displayA() {
		cout << xp << "," << yp << endl;
	}
	~A() {
		num++;
		cout << "調用析構:" << num << endl;
	}
private:
	int xp, yp;
};
class B {
public:
	B(int x1, int x2) : mpt1(x1 + 2, x2 - 2), mpt2(x1, x2) {
		cout << "調用構造\n";	//mpt是類A的對象,有幾個mpt,有關類A的操作便執行幾次 
	}
	void set(int m, int n);
	void displayB();
	~B() {
		cout << "調用析構\n";	//析構函數在類結束前調用,類結束的時候釋放類申請的空間
	} 
private:
	A mpt1, mpt2;		//將A類的對象聲明為B類的私有數據成員 
};

int A::value = 0;
int A::num = 0;
void B::set(int m, int n) {
	mpt1.xp = m * 2, mpt1.yp = n / 2;
}
void B::displayB() {
	mpt1.displayA();
}

int main() {
	B p(10, 20);
	cout << "Hello world!" << endl;
	B displayB();    //通過友元,使類B輸出類A的私有數據成員
	return 0;
}

以上是“C++類的靜態數據成員和靜態成員函數怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

c++
AI

开封县| 漳平市| 普宁市| 民权县| 轮台县| 河西区| 图木舒克市| 资中县| 普宁市| 吴江市| 靖远县| 崇文区| 安化县| 汾阳市| 云浮市| 武邑县| 陆丰市| 阳高县| 黎川县| 六枝特区| 海宁市| 石嘴山市| 庆云县| 德钦县| 三江| 河东区| 江城| 密云县| 类乌齐县| 宁城县| 林芝县| 错那县| 会东县| 绵竹市| 麻江县| 玉林市| 金寨县| 阳高县| 新津县| 安远县| 彰化县|