特点:
一般情况,一个类实例化的不同对象的数据成员存储空间相互独立。
若将类的一个成员定义为静态型的,则其实例化的所有对象的该成员用同一存储空间。
静态数据成员:
1)定义:加关键字 static
2)初始化:必须在类外进行初始化,格式:<类型标识符> <类名> :: <静态数据成员名> = <值>;
例:int Sample :: sum = 0;
静态成员函数:
1)引用: <类名>::<静态成员函数名>
2)访问数据成员:
对于非静态数据成员:需要传入实例化对象,不可直接访问
对于静态数据成员: 可直接访问,直接用静态数据成员名
练习:剑指offer 面试题46
题目: 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
通过构造函数和静态成员求解
static作用:
内存只分配一次,存在于全局区,在程序结束之后,由操作系统释放
若static变量未初始化,默认初始化为0;
1)函数体内,static变量
作用范围:该函数体内
值:下次调用时仍维持上次的值
2)模块内,
1)static全局变量:
作用范围:模块内,可以被所有函数访问,但不能被模块外其他函数访问
2)static函数:
作用范围:模块内,可以被其他函数调用
3)类内
1)static成员变量
作用范围:整个类所有,对类的所有对象只有一份复制(必须类外初始化)
2)static成员函数
作用范围:整个类所有,不接受this指针,故只能访问类的static成员变量