注意:以下描述的幾種類型變量描述的都是類中的成員變量
一、解釋
- static類型變量
static表示的是靜態的。類的靜態成員函數、靜態成員變量是和類相關的,而不是和類的具體對象相關的。即使沒有具體對象,也能調用類的靜態成員函數和成員變量。
一般類的靜態函數幾乎就是一個全局函數,只不過它的作用域限於包含它的文件中和類中,和靜態函數類似,【---】
----------------------------------------------
- 用static可以為類類型的所有對象所共有,像是全局對象,但又被約束在類類型的名字空間中。static定義的靜態常量在函數執行后不會釋放其存儲空間。
- 可以實施封裝,將其放在private或protected區域中。
- static成員沒有this指針,它不是任何一個對象的組成部分,推薦用“類名::static成員名調用”。
- static成員函數聲明時應寫明static關鍵字,在定義時不能加static關鍵字。
- static數據成員聲明時應寫明static關鍵字,在定義時不能加static關鍵字。
- static成員函數不能使用const以修飾其不改變成員屬性。
- static成員函數不能使用virtual以修飾其虛擬性。
- static const數據成員可以在類中聲明並且初始化,然后在類定義之外再次進行定義;或者在類中聲明,但在類定義外進行定義。非const的static數據成員僅能在類中聲明,並在類定義之外進行定義。
- static成員函數主要目的是作為類作用域的全局函數。不能訪問類的非靜態數據成員。類的靜態成員函數沒有this指針,這導致:1、2、
1) 不能直接存取類的非靜態成員變量,調用非靜態成員函數
2) 不能被聲明為virtual
- const類型變量
const定義的常量在超出其作用域之后其空間會被釋放,而static定義的靜態常量在函數執行后不會釋放其存儲空間。
- 引用類型變量
引用類型變量是其他變量的別稱,本身並不占用任何存儲空間,使用前必須要進行初始化
二、初始化方法
- static類型變量
在對應的源文件(.cpp文件)中初始化,格式如; int A::variable = 10 - const類型變量
只能在初始化列表中進行初始化 - 引用類型變量
只能在初始化列表中進行初始化
const數據成員 只在某個對象生存期內是常量,而對於整個類而言卻是可變的。因為類可以創建多個對象,不同的對象其const數據成員的值可以不同。要想建立在整個類中都恆定的常量,應該用類中的枚舉常量來實現,或者static cosnt。由此引入第四種類型變量--靜態常量,這種類型的變量初始化推薦和const類型變量的初始化方法一致。