MST

星途 面试题库

面试题:C++初始化成员列表在继承场景中的运用

假设有一个基类`Base`,包含一个`int`类型的成员变量`baseValue`。有一个派生类`Derived`,除了继承`Base`类的成员,还新增一个`double`类型的成员变量`derivedValue`。请使用初始化成员列表分别初始化`baseValue`和`derivedValue`,并编写完整的构造函数代码。同时说明为什么在这种继承场景下使用初始化成员列表是更合适的选择。
46.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>

class Base {
public:
    int baseValue;
    Base(int value) : baseValue(value) {}
};

class Derived : public Base {
public:
    double derivedValue;
    Derived(int baseVal, double derivedVal) : Base(baseVal), derivedValue(derivedVal) {}
};

在这种继承场景下使用初始化成员列表更合适,原因如下:

  • 效率更高:对于基类成员,使用初始化列表直接调用基类的构造函数进行初始化,而在构造函数体中赋值,会先调用基类的默认构造函数,然后再进行赋值操作,多了不必要的开销。
  • 成员初始化顺序:初始化列表按照成员声明顺序进行初始化,能够更好地控制成员的初始化顺序,避免因顺序问题导致的错误。
  • 常量和引用成员:如果基类或派生类中有常量成员或引用成员,必须在初始化列表中进行初始化,因为它们在对象构造后无法再次赋值。