C++类的普通成员变量与成员函数是与该类的对象有关,类的静态成员与对象无关,而与该类本身相关。
1 静态成员的声明
使用关键字static修饰的成员是类的静态成员。静态成员可以被声明成public或private,静态成员可以是常量、引用、指针、类类型和函数等。
2 静态成员的定义
2.1 静态函数的定义
2.1.1 类外部定义静态函数时不能使用static
可以在类的内部定义静态函数,也可以在类的外部定义静态函数。需要注意的是,static关键字只能在类内部出现,而在类外部定义静态函数时,不能重复使用static。
class myClass
{
static void myFunc1()
{
};
static void myFunc2();
};
void myClass::myFunc2()
{
}
其中,myFunc1()和myFunc2()是myClass类的静态成员函数,其中myFunc1()在myClass类内部定义,myFunc2()在myClass类外部定义,定义myFunc2()时,不能用static来修饰该函数,如果添加了static关键字,编译器的报错信息为“error C2724: “myClass::myFunc2”:“static”不应在文件范围内定义的成员函数上使用”。
2.1.2 类外部定义静态函数时可以直接使用类成员
void myClass::myFunc2()
{
myFunc1();
}
myFunc2是在myClass类外部定义的静态成员函数,在该函数中可以直接使用myClass类的其他成员。因为myFunc2()内部就属于myClass类的作用域之内了。
2.2 静态成员变量的定义
2.2.1 在类外对静态成员变量进行定义
定义类的静态成员变量时,不能在声明的时候直接定义。
class myClass
{
static int i = 1;
};
此时编译器报错的信息为“error C2864: “myClass::i”: 带有类内初始值设定项的静态 数据成员 必须具有不可变的常量整型”。必须在类外对静态成员进行定义。
class myClass
{
static int i;
};
int myClass::i = 1;
2.2.2 不能在构造函数的初始化列表中对静态成员变量进行定义
C++类的静态成员与类的对象无关,因此不能在类的构造函数的初始化列表中中定义静态成员变量。
class myClass
{
public:
static int i;
myClass() :i(1)
{
}
};
此时,报错信息为“error C2438: “i”: 无法通过构造函数初始化静态类数据”。