1)靜態成員變數
c++靜態成員變數是用static修飾的成員變數,不屬於物件的一部分,而是類一部分,因此可以在沒有例項化任何物件的時候使用靜態成員變數。但是
必須初始化它
。由於靜態變數只能被初始化一次
,所以初始化成員變數不要放在如下地方:1.類中函式之中(函式可被多次呼叫);2.類外函式之中;3.標頭檔案中(標頭檔案可能被包含入多個地方,也可能被執行多次)。
所以靜態成員變數應該放在定義檔案(如*.cpp)中函式之外的地方。
**示例:
由於靜態變數只能被初始化一次
,所以初始化成員變數不要放在如下地方:1.類的建構函式(建構函式可能多次被呼叫);2.標頭檔案中(標頭檔案可能被包含入多個地方,也可能被執行多次)。應該放在應用程式中,類以外的任何地方初始化
#include
using namespace std;
class a ;
class b ;
a b::a = a(); // 必須在標頭檔案之外,在類外函式之外的地方初始化。
2)類成員常量
類的成員常量,就是在類的普通成員變數前面加上const進行修飾後變成了常量。
類成員常量的初始化:需要在建構函式的成員初始化列表中進行初始化。不能在其他地方。
在建構函式中可以通過傳參形式進行初始化,所以這個常量並不一定在所有的類物件中是統一的常量。
注意:在visual studio新增類檔案的時候,常量的定義和賦值須在建構函式中進行,如果在.h檔案中定義常量,需要通過成員初始化列表進行初始化。
如**:
class a
//data1在不同物件中可以通過構造傳參實現不一致的常量。data2則在所以不同物件中一致。
const int data1;
const int data2; }
------------------------------
在vs2010以後的版本(vs2010不支援)支援.h檔案中變數的初始化功能,以及靜態常量的初始化:
有這種型別,他可以以靜態變數的定義方式進行定義,雖是成員常量但不需要以成員初始化列表的方式初始化。因為它不是
普通的成員常量(這句是自圓其說)。 :)
**如下:
#include
using namespace std;
class aa
;const double aa::dd = 3.14; // 這樣定義就可以。
會有靜態變數和常量的優點,並且支援任何型別。
int main()
在進一步驗證,發現編譯器還支援如下初始化方式:
這不公違背了常量的初始化方式,也違背了靜態變數的初始化方式。
#include
using namespace std;
class aa ;
int main()
C 靜態常量和動態常量的區別
c 擁有兩種不同的常量 靜態常量 compile time constants 和動態常量 runtime constants 它們有不同的特性,錯誤的使用不僅會損失效率,還可能造成錯誤。相比之下,靜態常量在速度上會稍稍快一些,但是靈活性卻比動態常量差很多。靜態常量 隱式是靜態的 public co...
C 之常量與靜態成員
1 宣告pi,半徑,計算周長和面積 其中pi宣告為常量 namespace 常量 a pi 9 報錯 double b pi r r console.writeline 面積 b console.readkey 2 宣告person類,定義靜態常量總人口,定義字段年齡,呼叫方法 人口匯報 宣告dog...
靜態區 常量池
靜態區 靜態變數 又叫類變數,有static修飾 和靜態方法存放在靜態區 使用某乙個類的時候,需要將該類的位元組碼檔案載入到元空間 在載入的過程中,會先檢查類中有沒有static修飾的成員 如果有,就會優先將static修飾的成員載入到靜態區。建立類的物件之後,物件存放在堆中,物件的變數名存放在棧中...