1. 程式人生 > >關於“只有靜態常量整型資料成員才可以在類中初始化”

關於“只有靜態常量整型資料成員才可以在類中初始化”

關於類中的靜態成員變數,

在類中只能宣告,不能定義
注意在類的內部只是宣告,不是定義

類中的靜態變數是屬於類的,不屬於某個物件!不能在定義物件時對變數初始化!就時不能用建構函式來初始化!而且使用時應加上類名,而不是物件。例如:
class A{
static int x;
static int y;
}
int A::x=1;
int A::y=2;//這樣初始化!
int main(){
cout<<A::x<<endl;
cout<<A::y<<endl;//同樣只能這樣使用!
}  

下面是對static的一點講解
===============================================
  靜態資料成員的使用方法和注意事項如下:

  1、靜態資料成員在定義或說明時前面加關鍵字static。

  2、靜態成員初始化與一般資料成員初始化不同。靜態資料成員初始化的格式如下:

    <資料型別><類名>::<靜態資料成員名>=<值>

  這表明:

  (1) 初始化在類體外進行,而前面不加static,以免與一般靜態變數或物件相混淆。

  (2) 初始化時不加該成員的訪問許可權控制符private,public等。

  (3) 初始化時使用作用域運算子來標明它所屬類,因此,靜態資料成員是類的成員,而不是物件的成員。

  3、靜態資料成員是靜態儲存的,它是靜態生存期,必須對它進行初始化。

  4、引用靜態資料成員時,採用如下格式:

   <類名>::<靜態成員名>

  如果靜態資料成員的訪問許可權允許的話(即public的成員),可在程式中,按上述格式來引用靜態資料成員。  

還有,只有靜態常量整型資料成員才可以在類中初始化

類中的靜態成員變數使用時,需要在類外宣告;
但是不能在*.h檔案中,而只能在*.cpp檔案中宣告;

然後在其它函式中可以直接使用。

比如:*.cpp檔案中:

========================a.h====================================================
class CMyLibpurple
{
public:
CMyLibpurple(void);
public:
~CMyLibpurple(void);
public:
static PurpleConversation *LocalConv;
}
========================a.h====================================================

========================a.cpp====================================================
PurpleConversation *CMyLibpurple::LocalConv = NULL;
CMyLibpurple::CMyLibpurple(void)
{
//LocalConv =NULL; 不能在建構函式中初始化,因為靜態變數不屬於哪個物件,而是屬於類。
}

static void
null_write_conv(PurpleConversation *conv, const char *who, const char *alias,
     const char *message, PurpleMessageFlags flags, time_t mtime)
{
CMyLibpurple::LocalConv = conv;
}