C++派生类构造函数调用基类构造函数的实现正确性咨询
问题解答
1. 现有实现的正确性
你的实现是完全正确的。这是C++中派生类复用基类构造函数的标准写法:在派生类构造函数的成员初始化列表中显式调用基类的带参构造函数,会先完成基类子对象的初始化,再初始化派生类自有成员,执行顺序完全符合预期:先输出base类构造日志,再输出derived类构造日志。
唯一的代码规范小瑕疵是两处多余的末尾分号,不影响运行但可以删掉:
- derived构造函数定义结束后的额外分号
get_val()函数定义结束后的额外分号
2. 更优的实现方案
适用C++11及更高版本的优化
如果你的编译环境支持C++11及以上标准,可以使用继承构造函数特性简化代码,尤其当基类有多个重载构造函数时,能避免手动逐个写派生类构造函数透传参数的重复代码,也能减少参数透传过程中出现笔误的概率。
优化后的示例代码:
class derived : public base { int value = 0; // 派生类成员可设置默认初始化值 public: // 直接继承base类的所有构造函数,编译器会自动生成对应参数列表的派生类构造 using base::base; // 若需要传入参数初始化派生类自有成员,保留对应构造函数即可,写法和你原有逻辑一致 derived(int x, int y, int z, int value) : base(x,y,z), value(value) { std::cout << "derived class constructor called\n"; } int get_val() const { return value; } };
如果使用的是C++03及更早的标准,那么你现有的写法就是最优的标准实现,没有更简洁的替代方案。
内容的提问来源于stack exchange,提问作者Michał Turek
相关产品推荐
相关产品推荐

