在C++面向对象的程序设计过程中,我们一般用 const 或者 static 来修饰共用数据,并对其提供保护。

const 类型 链接到标题

常对象 链接到标题

声明 链接到标题

类名 const 对象名[(实参表)];
const 类名 对象名[(实参表)];

说明 链接到标题

  1. 常对象必须要有初值;
  2. 常对象只能调用它的常成员函数,不能调普通成员函数(构造与析构函数除外);
  3. 常对象中也可以有普通成员函数,只不过不能调用而已。

常成员函数 链接到标题

声明 链接到标题

void getA() const;

说明 链接到标题

  1. 常成员函数可以访问任何对象中的数据成员,但不允许修改对象中数据成员的值;
  2. 如果一定要修改常对象中的某个数据成员的值的话,可以用 mutable 来修饰该数据成员,这样就可以用常成员函数来修改它的值了;
  3. 常成员函数不能调用另一个普通成员函数;
  4. const 结尾修饰的常成员函数和不加修饰的普通成员函数可以构成重载。

常数据成员 链接到标题

声明 链接到标题

const int a;

说明 链接到标题

  1. 只能通过构造函数的参数初始化表来对其进行初始化,其他任何方式都不能对常数据成员赋值。

static 类型 链接到标题

静态数据成员 链接到标题

声明 链接到标题

static int a;

说明 链接到标题

  1. 静态数据成员对所有该类的对象来说都是一样的,也即它不属于某个对象,而是属于整个类;
  2. 静态数据成员所占的空间的单独开辟的,只有一份,并不会在每个对象里占空间;
  3. 静态数据成员不随对象的建立而分配空间,也不随对象的撤销而释放,只在程序开始运行时分配空间,程序结束时释放;
  4. 静态数据成员可以初始化,但只能在类体外进行初始化,不能用参数初始化表对静态数据成员进行初始化;
  5. 静态数据成员既可以通过对象名引用,也可以通过类名来引用;
  6. 静态数据成员可以被普通成员函数或是静态成员函数引用;
  7. 静态数据成员的类型可以是“不完整类型”(也即正在定义的这个类);
  8. 静态数据成员可以成为成员函数的默认参数。

初始化 链接到标题

数据类型 类名::静态数据成员名 = 初值;

静态成员函数 链接到标题

声明 链接到标题

static int volume();

说明 链接到标题

  1. 静态成员函数是类的一部分,不是对象的一部分,所以在空间部分和静态数据成员类似;
  2. 在类外调用公用的静态成员函数时需要加 类名::
  3. 静态成员函数没有 this 指针;
  4. 静态成员函数主要用来调用静态数据成员,而不访问非静态成员(非绝对,但提倡这样);
  5. 在调用静态成员函数时,系统中最好已经存在此类的对象,否则无意义;
  6. 虚函数不能是静态函数。