静态成员变量和静态成员函数
class ClassA
{
int a;
int b;
static int c; //静态成员变量
static void xxx_fun() //静态成员函数
{
...
}
}
- 普通成员变量每个对象都有各自的一份,静态成员变量所有对象共享。
- 普通成员函数每个对象都有各自的一份,静态成员函数所有对象共享,内存只有一份。
- 非静态成员函数必须作用于某个具体对象,静态成员函数并不具体作用于某个对象
- 静态成员不需要通过对象就能访问。
- 静态成员变量本质是全局变量,静态成员函数本质是全局函数。
- 静态成员函数不能为虚函数。
- 静态成员函数没有this指针不能直接访问类中得非静态成员,必须借助对象名或者对象的指针才能访问。
访问静态成员
- <类名>::<成员名>
class ClassA
{
int a;
int b;
static int c; //静态成员变量
static void xxx_fun() //静态成员函数
{
...
}
}
int main(void)
{
ClassA r;
r.xxx_fun(); //对象名.成员名访问方式
ClassA::xxx_fun(); //类名::成员名 访问方式
ClassA *p = &r;
p->xxx_fun();
return 0;
}
静态成员函数不能访问非静态成员变量,也不能调用非静态成员函数。