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