一.static的作用有三种:限制static变量或static函数作用域,保持变量内容的持久,默认初始化为0
- 1.被static关键字修饰的全局函数或者变量具有文件作用域,即只可以在当前文件中可见。
- 2.被static修饰的变量会存储在静态存储区,生命周期也为从定义直至程序结束。对于局部变量, 即使在函数退出后该静态变量依然存在,然而却无法访问,此外,static修饰的变量一生只能初始化一次(常考)
- 3.静态存储区的变量被默认为0。
二.面向对象的static
- 1.静态数据成员
定义:在类中数据成员的声明前加上static,该成员是类的静态成员。
ps:静态成员并不像一般的成员变量在构造函数中初始化,而是在类实现文件中初始化,即必须在.cpp中初始化,否则程序链接会出现错误,重定义,且初始化时无需再用static关键字修饰
例子:
class ALA
{
public:
ALA(int a, int b, int c);
void GetSum();
private:
int a, b, c;
static int d;//创建静态成员
};
int ALA::d = 0;//定义并初始化静态数据成员
特点:
对于非静态成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员,无论类被定义了多少个,静态数据成员都只有一份拷贝,为该类型的所有对象所共享。所以静态成员的值对每个成员都是一样的,它的值可以更新
- 2.静态成员函数
特点:
1.类的静态成员函数属于整个类而非类的对象,所以没有this指针,这导致了他只可以访问类的静态数据和静态成员函数。
2.静态函数在类定义体外不能加static关键字修饰,因为成员函数本是类总用域,而在类外用static声明会将其作用扩大为文件作用域,是不合理的