MST

星途 面试题库

面试题:C++类中const成员变量的初始化及访问控制

在C++类中,const成员变量如何初始化?在类的不同成员函数(const和非const)中,对const成员变量的访问规则是怎样的?如果涉及继承,派生类对基类的const成员变量的初始化和访问又有什么特殊之处?请详细阐述并给出代码示例。
38.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. const成员变量的初始化
    • const成员变量必须在构造函数的初始化列表中进行初始化。因为const变量一旦被初始化后就不能再修改,所以不能在构造函数体中进行赋值操作。
    • 示例代码如下:
class MyClass {
private:
    const int num;
public:
    MyClass(int value) : num(value) {
        // 不能在这里对num进行赋值,比如 num = value; 会报错
    }
    int getNum() const {
        return num;
    }
};
  1. 在类的不同成员函数中对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;
    }
};
  1. 涉及继承时,派生类对基类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;
    }
};