关于“只有静态常量整型数据成员才可以在类中初始化”

时间:2023-02-10 18:53:48

关于“只有静态常量整型数据成员才可以在类中初始化”

关于类中的静态成员变量,

在类中只能声明,不能定义
注意在类的内部只是声明,不是定义

类中的静态变量是属于类的,不属于某个对象!不能在定义对象时对变量初始化!就时不能用构造函数来初始化!而且使用时应加上类名,而不是对象。例如: 
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; 
}