關於類中的靜態成員變量,
在類中只能聲明,不能定義
注意在類的內部只是聲明,不是定義
類中的靜態變量是屬於類的,不屬於某個對象!不能在定義對象時對變量初始化!就時不能用構造函數來初始化!而且使用時應加上類名,而不是對象。例如:
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;
}