C++头文件中父类及继承构造的子类构造函数如何声明?
C++ 子类继承父类构造函数的问题解答
核心结论先行
类的所有成员(包括构造函数、普通成员函数、成员变量)的声明必须放在类定义内(也就是头文件中),不能把构造函数的声明放到 .cpp 文件里。
分标准场景处理
场景1:使用 C++11 及以上版本(目前绝大多数开发环境默认支持)
你完全不需要手动声明 Child(int a, int b) 构造函数,也不需要单独写它的实现:
- 只需要在
child.h的子类定义中添加using Parent::Parent;语句,编译器会自动继承父类所有构造函数,生成对应版本的子类构造函数 - 你只需要在子类头文件里额外声明你新增的成员函数签名即可
示例代码:
// child.h 示例 #include "parent.h" class Child : public Parent { public: using Parent::Parent; // 直接继承父类所有构造函数 void new_custom_func(); // 仅声明新增的自定义成员函数 int another_new_func(int input); };
场景2:使用 C++03 及更早的旧标准
你必须显式声明并实现子类构造函数:
- 在
child.h的子类定义中显式声明Child(int a, int b); - 在
child.cpp中实现该构造函数,手动调用父类的构造函数完成父类部分初始化即可
示例代码:
// child.h 示例(兼容 C++03 标准) #include "parent.h" class Child : public Parent { public: Child(int a, int b); // 必须显式声明构造函数 void new_custom_func(); int another_new_func(int input); }; // child.cpp 对应实现 #include "child.h" Child::Child(int a, int b) : Parent(a, b) { // 没有子类成员需要额外初始化的话,函数体留空即可 } // 后续实现你新增的自定义成员函数
额外提示:如果你子类新增了需要初始化的非静态成员变量,不管用哪个版本的标准,都建议显式定义子类构造函数,完成新增成员的初始化逻辑,避免出现未定义行为。
内容的提问来源于stack exchange,提问作者jesus_is_king
相关产品推荐
相关产品推荐

