const 對象
- const對象的定義:
const MyClass obj(參數(shù)表);
const對象不能被賦值,只能初始化,而且一定要初始化,否則無法設(shè)置它的值。
C++規(guī)定:對const對象只能調(diào)用const成員函數(shù)
const 成員函數(shù)
任何不修改數(shù)據(jù)成員的函數(shù)都應(yīng)該聲明為
const類型。如果在編寫const成員函數(shù)時,不慎修改了數(shù)據(jù)成員,或者調(diào)用了其他非const成員函數(shù),編譯器將指出錯誤,這無疑會提高程序的健壯性。
定義時和實現(xiàn)時在函數(shù)頭后添加const關(guān)鍵字
const數(shù)據(jù)成員
const數(shù)據(jù)成員只在某個對象生存期內(nèi)是常量,而對于整個類而言卻是可變的。同一類的不同的對象其const數(shù)據(jù)成員的值可以不同。
常量(const)數(shù)據(jù)成員聲明:在該成員聲明前加
const關(guān)鍵字const數(shù)據(jù)成員的初始化只能在類構(gòu)造函數(shù)的初始化表中進(jìn)行,不能在構(gòu)造函數(shù)中對它賦值。
static數(shù)據(jù)成員
【靜態(tài)(static)數(shù)據(jù)成員】
- 靜態(tài)數(shù)據(jù)成員不屬于對象的一部分,而是類的一部分;
- 靜態(tài)數(shù)據(jù)成員的初始化不能放在類的構(gòu)造函數(shù)中;
- 類定義并不分配空間,空間是在定義對象時分配;
- 但靜態(tài)數(shù)據(jù)成員屬于類,因此定義對象時并不為靜態(tài)成員分配空間。
【靜態(tài)數(shù)據(jù)成員的定義】
- 為靜態(tài)成員分配空間稱為靜態(tài)成員的定義;
- 靜態(tài)成員的定義一般出現(xiàn)在類的實現(xiàn)文件中。如在SavingAccount類的實現(xiàn)文件中,必須要如下的定義:
double SavingAccount::rate = 0.05;
- 該定義為
rate分配了空間,并給它賦了一個初值0.05。
如果沒有這個定義,連接器會報告一個錯誤。
【靜態(tài)數(shù)據(jù)成員的使用】
- 可以通過作用域操作符從類直接調(diào)用。如:
SavingAccount::rate
- 但從每個對象的角度來看,它似乎又是對象的一部分,因此又可以從對象引用它。如有個
SavingAccount類的對象obj,則可以用:
obj.rate
- 由于是整個類共享的,因此不管用哪種調(diào)用方式,得到的值都是相同的
static成員函數(shù)
定義靜態(tài)成員函數(shù)的主要目的是訪問靜態(tài)的數(shù)據(jù)成員。
【靜態(tài)(static)成員函數(shù)】
- 成員函數(shù)也可以是靜態(tài)的。靜態(tài)的成員函數(shù)是為類的全體對象服務(wù),而不是為某個類的特殊對象服務(wù)
- 由于靜態(tài)成員函數(shù)不需要借助任何對象就可以被調(diào)用,所以編譯器不會為它暗加一個
this指針。因此,靜態(tài)成員函數(shù)無法處理類中的非靜態(tài)成員變量。 - 靜態(tài)成員函數(shù)的聲明只需要在類定義中的函數(shù)原型前加上保留詞
static。
【靜態(tài)成員函數(shù)使用】
- 靜態(tài)成員函數(shù)可定義為內(nèi)嵌的,也可在類外定義。在類外定義時,不用
static。 - 靜態(tài)成員函數(shù)的訪問:可以通過類作用域限定符或通過對象訪問
類名::靜態(tài)成員函數(shù)名()
對象名.靜態(tài)成員函數(shù)名()