在C++面向对象的程序设计过程中,我们一般用 const 或者 static 来修饰共用数据,并对其提供保护。
const 类型 链接到标题
常对象 链接到标题
声明 链接到标题
类名 const 对象名[(实参表)];
const 类名 对象名[(实参表)];
说明 链接到标题
- 常对象必须要有初值;
- 常对象只能调用它的常成员函数,不能调普通成员函数(构造与析构函数除外);
- 常对象中也可以有普通成员函数,只不过不能调用而已。
常成员函数 链接到标题
声明 链接到标题
void getA() const;
说明 链接到标题
- 常成员函数可以访问任何对象中的数据成员,但不允许修改对象中数据成员的值;
- 如果一定要修改常对象中的某个数据成员的值的话,可以用
mutable
来修饰该数据成员,这样就可以用常成员函数来修改它的值了; - 常成员函数不能调用另一个普通成员函数;
- 加
const
结尾修饰的常成员函数和不加修饰的普通成员函数可以构成重载。
常数据成员 链接到标题
声明 链接到标题
const int a;
说明 链接到标题
- 只能通过构造函数的参数初始化表来对其进行初始化,其他任何方式都不能对常数据成员赋值。
static 类型 链接到标题
静态数据成员 链接到标题
声明 链接到标题
static int a;
说明 链接到标题
- 静态数据成员对所有该类的对象来说都是一样的,也即它不属于某个对象,而是属于整个类;
- 静态数据成员所占的空间的单独开辟的,只有一份,并不会在每个对象里占空间;
- 静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放,只在程序开始运行时分配空间,程序结束时释放;
- 静态数据成员可以初始化,但只能在类体外进行初始化,不能用参数初始化表对静态数据成员进行初始化;
- 静态数据成员既可以通过对象名引用,也可以通过类名来引用;
- 静态数据成员可以被普通成员函数或是静态成员函数引用;
- 静态数据成员的类型可以是“不完整类型”(也即正在定义的这个类);
- 静态数据成员可以成为成员函数的默认参数。
初始化 链接到标题
数据类型 类名::静态数据成员名 = 初值;
静态成员函数 链接到标题
声明 链接到标题
static int volume();
说明 链接到标题
- 静态成员函数是类的一部分,不是对象的一部分,所以在空间部分和静态数据成员类似;
- 在类外调用公用的静态成员函数时需要加
类名::
; - 静态成员函数没有
this
指针; - 静态成员函数主要用来调用静态数据成员,而不访问非静态成员(非绝对,但提倡这样);
- 在调用静态成员函数时,系统中最好已经存在此类的对象,否则无意义;
- 虚函数不能是静态函数。