static成员
-
static成员变量
静态成员变量不属于某个类对象,而是被类的所有对象共享的,其在编译时就为其分配了空间;
类内的静态成员函数或非静态成员函数都可以使用静态变量;
公有属性的静态成员变量,在类之外,可以通过类名来调用,也可通过对象来调用。
不能在类声明中初始化静态成员变量,而要在类声明之外进行初始化。这是因为声明中描述了如何分配内存,但并不分配内存。而静态成员变量是单独存储的,不是对象的组成部分,其在编译时就需要分配好空间。
初始化是在方法文件中,而不是在类声明文件中进行的。如果类声明在头文件中,程序可能将头文件包括在其他几个文件中。如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误。
初始化语句需要指明类型,并使用作用域运算符,但不使用static关键字。
int Vector::num = 0;
-
static成员函数
静态成员函数不能使用this指针;
静态成员函数只能使用静态成员变量。
公有属性的静态成员函数,在类之外,可以使用类名来调用,也可通过对象来调用。
// 调用之一 Vector::get_num(); // 调用之二 Vector v1; v1.get_num();
-
static类对象
同static变量。
const成员
-
const成员变量
初始化 const 成员变量是通过构造函数的初始化列表来初始化,也可求助于静态数据成员或者使用枚举。
一旦被初始化,其值就不可再改变。
-
const成员函数
const 成员函数可以访问类中的所有成员变量,但是不能修改它们的值。
const 函数只能调用 const 函数。非 const 函数可以调用 const 函数。
const成员函数需要在函数声明和实现处都添加const关键字。
//声明 void get_x() const; //实现 void Vector::get_x() const { //... }
-
const类对象
const也可用于修饰类的对象,称之为常对象。常对象只能调用类的const成员,包括const成员变量和const成员函数,且不能修改任何成员变量,除非显式地使用关键字mutable来表示成员变量无论如何时都可改变的。