面试题答案
一键面试#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) {}
};
在这种继承场景下使用初始化成员列表更合适,原因如下:
- 效率更高:对于基类成员,使用初始化列表直接调用基类的构造函数进行初始化,而在构造函数体中赋值,会先调用基类的默认构造函数,然后再进行赋值操作,多了不必要的开销。
- 成员初始化顺序:初始化列表按照成员声明顺序进行初始化,能够更好地控制成员的初始化顺序,避免因顺序问题导致的错误。
- 常量和引用成员:如果基类或派生类中有常量成员或引用成员,必须在初始化列表中进行初始化,因为它们在对象构造后无法再次赋值。