注意:以下描述的几种类型变量描述的都是类中的成员变量
一、解释
- static类型变量
static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。
一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中和类中,和静态函数类似,【---】
----------------------------------------------
- 用static可以为类类型的所有对象所共有,像是全局对象,但又被约束在类类型的名字空间中。static定义的静态常量在函数执行后不会释放其存储空间。
- 可以实施封装,将其放在private或protected区域中。
- static成员没有this指针,它不是任何一个对象的组成部分,推荐用“类名::static成员名调用”。
- static成员函数声明时应写明static关键字,在定义时不能加static关键字。
- static数据成员声明时应写明static关键字,在定义时不能加static关键字。
- static成员函数不能使用const以修饰其不改变成员属性。
- static成员函数不能使用virtual以修饰其虚拟性。
- static const数据成员可以在类中声明并且初始化,然后在类定义之外再次进行定义;或者在类中声明,但在类定义外进行定义。非const的static数据成员仅能在类中声明,并在类定义之外进行定义。
- static成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有this指针,这导致:1、2、
1) 不能直接存取类的非静态成员变量,调用非静态成员函数
2) 不能被声明为virtual
- const类型变量
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。
- 引用类型变量
引用类型变量是其他变量的别称,本身并不占用任何存储空间,使用前必须要进行初始化
二、初始化方法
- static类型变量
在对应的源文件(.cpp文件)中初始化,格式如; int A::variable = 10 - const类型变量
只能在初始化列表中进行初始化 - 引用类型变量
只能在初始化列表中进行初始化
const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt。由此引入第四种类型变量--静态常量,这种类型的变量初始化推荐和const类型变量的初始化方法一致。