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


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

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

在類中只能聲明,不能定義
注意在類的內部只是聲明,不是定義

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

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM