- const成员变量的初始化:
- const成员变量必须在构造函数的初始化列表中进行初始化。因为const变量一旦被初始化后就不能再修改,所以不能在构造函数体中进行赋值操作。
- 示例代码如下:
class MyClass {
private:
const int num;
public:
MyClass(int value) : num(value) {
// 不能在这里对num进行赋值,比如 num = value; 会报错
}
int getNum() const {
return num;
}
};
- 在类的不同成员函数中对const成员变量的访问规则:
- const成员函数:可以访问类中的const成员变量,因为const成员函数承诺不会修改对象的状态,而访问const成员变量不会改变对象状态。
- 非const成员函数:也可以访问类中的const成员变量,因为读取const成员变量本身不会改变对象的状态。
- 示例代码如下:
class AnotherClass {
private:
const int constVar;
public:
AnotherClass(int value) : constVar(value) {}
int getConstVar() const {
return constVar;
}
int getConstVarNonConst() {
return constVar;
}
};
- 涉及继承时,派生类对基类const成员变量的初始化和访问:
- 初始化:派生类必须在其构造函数的初始化列表中调用基类的构造函数来初始化基类的const成员变量。
- 访问:如果基类的const成员变量是public或protected的,派生类的成员函数可以像访问自身的const成员变量一样访问它(在符合访问权限的情况下)。
- 示例代码如下:
class Base {
protected:
const int baseConst;
public:
Base(int value) : baseConst(value) {}
};
class Derived : public Base {
public:
Derived(int value) : Base(value) {}
int getBaseConst() const {
return baseConst;
}
};