最近碰到了靜態成員初始化問題,故在網上搜尋了點資料,感覺這篇總結的蠻不錯的,轉來學習下。
有些成員變數的資料型別比較特別,它們的初始化方式也和普通資料型別的成員變數有所不同。這些特殊的型別的成員變數包括:
a. 常量型成員變數
b. 引用型成員變數
c. 靜態成員變數
d. 整型靜態常量成員變數
e. 非整型靜態常量成員變數
對於常量型成員變數和引用型成員變數的初始化,必須通過建構函式初始化列表的方式進行。在建構函式體內給常量型成員變數和引用型成員變數賦值的方式是行不通的。
靜態成員變數的初始化也頗有點特別。
//initialization of special data member
#include
using
namespace std;
class bclass
//行賦值的方式,是行不通的。
void print_values()
private:
int i; //
普通成員變數
const
int ci; //
常量成員變數
int &ri; //
引用成員變數
static
int si; //
靜態成員變數
//static int si2 = 100;
//error: 只有靜態常量成員變數,才可以這樣初始化
static
const
int csi; //
靜態常量成員變數
static
const
int csi2=100; //
靜態常量成員變數的初始化(integral type) (1)(在vc++6.0也是不允許的)
static
const
double csd; //
靜態常量成員變數(non-integral type)
//static const double csd2 = 99.9;
//error: 只有靜態常量整型資料成員才可以在類中初始化
};//
靜態成員變數的初始化(integral type)
int bclass::si = 0;
//靜態常量成員變數的初始化(integral type)
const
int bclass::csi = 1;
//靜態常量成員變數的初始化(non-integral type)
const
double bclass::csd = 99.9;
//在初始化(1)中的csi2時,根據stanley b. lippman的說法下面這行是必須的。
//但在vc2003中如果有下面一行將會產生錯誤,而在vc2005中,下面這行則可有可無,這個和編譯器有關。
const
int bclass::csi2;
int main(void)
類中特殊成員變數的初始化
有些成員變數的資料型別比較特別,它們的初始化方式也和普通資料型別的成員變數有所不同。這些特殊的型別的成員變數包括 a.常量型成員變數 b.引用型成員變數 c.靜態成員變數 d.整型靜態常量成員變數 e.非整型靜態常量成員變數 對於常量型及引用型成員變數,由於這兩種型別不支援賦值操作,因此必須通過建構...
初始化列表成員變數的初始化
對於以下程式 include using namespace std class base base b 0 a b int get a int get b int main 本想得到的結果是a,b都為90。但是實際結果卻是 4273046 90process returned 0 0x0 exec...
模板資料成員變數初始化
在定義模板類後,會面臨如何對模板資料成員變數進行初始化,對於用途十分明確的模板類,可以根據用途直接定義初始化的型別。但對於通用模板類,成員變數的型別可能是基本型別,也可能是復合型別,所以需要使用通用的初始化手段。在c 中可以使用初始化列表對任何型別進行初始化,不論是基本型別還是復合型別。值初始化,例...