类静态成员的作用:
假设存在多个string对象,即string A ;和 string B ; 若string类存在静态成员static c,则针对于该变量A,B均共享同一个c,其实可以等同于在一个家庭中你和你的父母,女朋友共享同一个腾讯视频会员账号。
类静态成员的使用:
如下述代码,在类A中申明了静态变量a,此时不能进行初始化,是因为类申明只描述如何分配内存,但并不分配内存,类分配内存是在原文件创建对象后进行分配。
// A.h A的头文件
class A {
private :
static int a ;
}
类中静态变量的申明应该在实现文件中
// A.cpp
static int a = 3;
即初始化是在方法文件中,而不是在类申明文件中,这是因为类申明位于头文件中,程序可能将头文件包括在多个文件中。如果在头文件中进行初始化,将出现多个初始化副本引起问题。
类静态成员的例外:
将静态类成员申明为const 便可以在类申明中进行初始化。
// A.h A的头文件
class A {
private :
const static int a = 1;
}
静态成员函数
可以将成员函数声明为静态的(函数声明必须包括关键字static,但如果函数定义是独立的,则其中不能包含static),这样做有两个后果。
首先不能通过对象调用静态成员函数;实际上静态成员函数甚至不能使用指针this。如果静态成员函数是在公有部分声明的,则可以使用类名与区域运算符来调用它。例如,可以给A类添加静态成员函数Returna(),方法是在类声明中添加如下原型/定义:static int A::Returna() {return a;}。调用它的方法如下:int coutna = Returna() ;最后由于静态成员函数和特定对象无关,因此只能使用静态数据成员。例如静态成员函数Returna()可以调用静态成员a。