为了账号安全,请及时绑定邮箱和手机立即绑定

继承构造器

继承构造器

C++
侃侃尔雅 2019-07-09 10:31:00
继承构造器为什么这个代码:class A{     public:          explicit A(int x) {}};class B: public A{};int main(void){     B *b = new B(5);     delete b;}导致这些错误:main.cpp: In function ‘int main()’: main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note:                 B::B(const B&)B不应该继承A的构造函数吗?(这是GCC用的)
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

构造函数不是继承的。子构造函数隐式或显式地调用它们。

编译器创建一个默认构造函数(一个没有参数)和一个默认复制构造函数(一个带有参数,它是对同一类型的引用)。但是,如果您想要一个将接受int的构造函数,则必须显式地定义它。

class A{public: 
    explicit A(int x) {}};class B: public A{public:
    explicit B(int x) : A(x) { }};

更新在C+11中,可以继承构造函数。详见Suma的回答。


查看完整回答
反对 回复 2019-07-09
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

您必须在B中显式定义构造函数,并显式调用父构造函数。

B(int x) : A(x) { }

B() : A(5) { }


查看完整回答
反对 回复 2019-07-09
  • 3 回答
  • 0 关注
  • 309 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信