- static在类外部使用
1、static修饰全局变量,限制全局变量的作用域,仅仅限于该文件。
2、static修饰局部变量,存储位置从堆栈段转移到了data段的rw段或bss段。生命周期变为和整个进程的生命周期一样了。
- static在类内部使用
用来实现同一个类的所有对象的数据共享。
class A()
{
private:
int num;
static int shareVal;//该变量为static变量
};
|
在生成对象的时候类中的普通数据成员才开辟空间,而static成员变量在类声明的时候已经为该变量开辟了空间(在data段的rw段)。
static既属于类,也属于对象。
类内定义,类外初始化,int A::shareVal = 100;//初始化
调用:
类名::static变量
对象名.static变量
- static类成员函数
为了管理静态成员,c++提供了静态成员函数,以对外提供接口。
如果static成员变量为private,则只能通过静态
成员函数访问该static变量。
调用:
类名::static函数
对象名.static函数
总结:
1、静态成员函数的意义,不在于信息共享,数据沟通,而在于管理静态数据成员,完成对静态数据成员的封装。
2、静态成员函数只能访问静态数据成员,不能访问非static数据成员和非static成员函数。原因:非静态成员函数,在调用时 this指针时被当作参数传进。而静态成员函数属于类,而不属于对象,没有 this 指针。