继承构造器

继承构造器

为什么这个代码:

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用的)


侃侃尔雅
浏览 310回答 3
3回答

拉丁的传说

构造函数不是继承的。子构造函数隐式或显式地调用它们。编译器创建一个默认构造函数(一个没有参数)和一个默认复制构造函数(一个带有参数,它是对同一类型的引用)。但是,如果您想要一个将接受int的构造函数,则必须显式地定义它。class A{public:      explicit A(int x) {}};class B: public A{public:     explicit B(int x) : A(x) { }};更新在C+11中,可以继承构造函数。详见Suma的回答。

叮当猫咪

您必须在B中显式定义构造函数,并显式调用父构造函数。B(int x) : A(x) { }或B() : A(5) { }
打开App,查看更多内容
随时随地看视频慕课网APP