一。面向过程设计时的static
(1)静态变量
静态变量只初始化一次,未初始化的静态变量会默认初始化为0。
静态全局变量:
静态全局变量只在本文件可见,外部文件无法访问
静态局部变量:
而静态局部变量只在定义的作用域内可见,但他们的生存周期都是整个程序运行时期。
(2)静态函数
静态函数主要是起到函数的隐藏作用,static修饰的函数只允许在当前文件中使用,在其他文件中无法找到该函数的地址,include也没用
二。面向对象设计时的static
可以用类名:: 直接调用公有静态数据成员和静态成员函数
(1)静态数据成员
不管这个类有多少实例,这个静态数据成员只有这一个。
static修饰的数据成员不在栈上分配内存而在.data段分配内存,
static修饰的数据成员不能通过调用构造函数来进行初始化,因此static修饰的数据成员必须在类外进行定义,定义的时候可以不初始化。在cpp中定义,在头文件中声明。如果在头文件中定义,当多个文件include这个头文件时候,会重复定义。
(2)静态成员函数
好处就是不需要对象来调用这个函数,直接用类名就行了
静态成员函数可以在类内或类外定义,但必须在类内声明;
static成员函数没有this指针,所以不能直接引用非static数据成员或调用类的非static成员函数,只能调用类的static成员数据和static成员函数;
static成员不是任何对象的组成,不依赖对象的调用所以static成员方法不能被声明为const,因为const只限定该类的对象;
static成员方法不能同时被声明为虚函数。