目錄
靜態資料成員
靜態成員函數
首頁 後端開發 C#.Net教程 C++類別的靜態資料成員與靜態成員函數

C++類別的靜態資料成員與靜態成員函數

Aug 06, 2018 pm 04:16 PM
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 靜態成員與常成員的使用

C 複習重點總結之五靜態成員變數及成員函數

#

以上是C++類別的靜態資料成員與靜態成員函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

C語言中的常數是什麼,可以舉例嗎? C語言中的常數是什麼,可以舉例嗎? Aug 28, 2023 pm 10:45 PM

常量也稱為變量,一旦定義,其值在程式執行期間​​就不會改變。因此,我們可以將變數宣告為引用固定值的常數。它也被稱為文字。必須使用Const關鍵字來定義常數。語法C程式語言中使用的常數語法如下-consttypeVariableName;(or)consttype*VariableName;不同類型的常數在C程式語言中使用的不同類型的常數如下所示:整數常數-例如:1,0,34, 4567浮點數常數-例如:0.0,156.89,23.456八進制和十六進制常數-例如:十六進制:0x2a,0xaa..八進制

VSCode和VS C++IntelliSense無法運作或拾取函式庫 VSCode和VS C++IntelliSense無法運作或拾取函式庫 Feb 29, 2024 pm 01:28 PM

VS程式碼和VisualStudioC++IntelliSense可能無法拾取函式庫,尤其是在處理大型專案時。當我們將滑鼠懸停在#Include&lt;wx/wx.h&gt;上時,我們看到了錯誤訊息「CannotOpen來源檔案'string.h'」(依賴於「wx/wx.h」),有時,自動完成功能無法回應。在這篇文章中,我們將看到如果VSCode和VSC++IntelliSense不能工作或不能提取庫,你可以做些什麼。為什麼我的智能感知不能在C++中運作?處理大型檔案時,IntelliSense有時

修復Xbox錯誤代碼8C230002 修復Xbox錯誤代碼8C230002 Feb 27, 2024 pm 03:55 PM

您是否因為錯誤代碼8C230002而無法在Xbox上購買或觀看內容?一些用戶在嘗試購買或在其控制台上觀看內容時不斷收到此錯誤。抱歉,Xbox服務出現問題。稍後再試。有關此問題的協助,請造訪www.xbox.com/errorhelp。狀態代碼:8C230002這種錯誤代碼通常是由於暫時的伺服器或網路問題引起的。但是,還有可能是由於帳戶的隱私設定或家長控制等其他原因,這些可能會阻止您購買或觀看特定內容。修正Xbox錯誤代碼8C230002如果您嘗試在Xbox控制台上觀看或購買內容時收到錯誤代碼8C

遞歸程式在C++中找到陣列的最小和最大元素 遞歸程式在C++中找到陣列的最小和最大元素 Aug 31, 2023 pm 07:37 PM

我們以整數數組Arr[]作為輸入。目標是使用遞歸方法在陣列中找到最大和最小的元素。由於我們使用遞歸,我們將遍歷整個數組,直到達到長度=1,然後返回A[0],這形成了基本情況。否則,將當前元素與當前最小或最大值進行比較,並透過遞歸更新其值以供後續元素使用。讓我們來看看這個的各種輸入輸出場景−輸入 −Arr={12,67,99,76,32};輸出 −數組中的最大值:99解釋 &mi

中國東方航空宣布C919客機即將投入實際運營 中國東方航空宣布C919客機即將投入實際運營 May 28, 2023 pm 11:43 PM

5月25日消息,中國東方航空在業績說明會上揭露了關於C919客機的最新進展。據公司表示,與中國商飛簽署的C919採購協議已於2021年3月正式生效,其中首架C919飛機已於2022年底交付。預計不久之後,該飛機將正式投入實際運作。東方航空將以上海為主要基地進行C919的商業運營,並計劃在2022年和2023年引進總共5架C919客機。該公司表示,未來的引進計畫將根據實際營運狀況和航線網路規劃來決定。據小編了解,C919是中國具有完全自主智慧財產權的全球新一代單通道幹線客機,符合國際通行的適航標準。該

C++程式列印數字的螺旋圖案 C++程式列印數字的螺旋圖案 Sep 05, 2023 pm 06:25 PM

以不同格式顯示數字是學習基本編碼問題之一。不同的編碼概念,如條件語句和迴圈語句。有不同的程式中,我們使用特殊字元(如星號)來列印三角形或正方形。在本文中,我們將以螺旋形式列印數字,就像C++中的正方形一樣。我們將行數n作為輸入,然後從左上角開始移向右側,然後向下,然後向左,然後向上,然後再次向右,以此類推等等。螺旋圖案與數字123456724252627282982340414243309223948494431102138474645321120373635343312191817161514

C語言中的void關鍵字的作用 C語言中的void關鍵字的作用 Feb 19, 2024 pm 11:33 PM

C中的void是一個特殊的關鍵字,用來表示空類型,也就是指沒有具體類型的資料。在C語言中,void通常用於以下三個方面。函數傳回類型為void在C語言中,函數可以有不同的回傳類型,例如int、float、char等。然而,如果函數不傳回任何值,則可以將傳回類型設為void。這意味著函數執行完畢後,並不傳回具體的數值。例如:voidhelloWorld()

23 年來首次,C# 獲得了 TIOBE 2023 年度程式語言獎 23 年來首次,C# 獲得了 TIOBE 2023 年度程式語言獎 Jan 11, 2024 pm 04:45 PM

根據TIOBE程式設計社群指數,該指數是衡量程式語言受歡迎程度的標準之一,透過收集來自全球工程師、課程、供應商和搜尋引擎的數據進行評估。 2024年1月TIOBE指數於近日發布,同時官方公佈了2023年程式語言排名,C#榮獲TIOBE2023年度程式語言,這是23年來C#首次拿下這項榮譽。 TIOBE官方新聞稿稱,C#已經穩居前10名長達20多年,如今它正在追趕四大語言,成為一年內漲幅最大的程式語言(+1.43%),當之無愧地獲得了該獎項。排名第二的是Scratch(+0.83%)和Fortran(+0

See all articles