使用子类的父类构造函数

Posted

技术标签:

【中文标题】使用子类的父类构造函数【英文标题】:Use parent class constructor for child 【发布时间】:2015-02-01 11:16:08 【问题描述】:

所以,我想要拥有所有来自其父类的构造函数的 Child 类。这在 C++ 中可能吗?我试过using 声明,但它不起作用。到目前为止,这是我所得到的:

struct Base
    Base(int i)
        std::cout << "Construcetd a base with " << i << std::endl;
    


;


struct Child : public Base
    using Base::Base;

;




int main()

    Child c(1);

我得到的错误:

error C2664: 'Child::Child(const Child &)' : cannot convert argument 1 from 'int' to 'const Child &'

哦,我正在使用 Visual Studio 2013

【问题讨论】:

您需要 C++11 支持。您的编译器似乎不支持此功能。 【参考方案1】:

继承构造函数是 C++11 语言的特性,

struct A  A(int); ;
struct B: A  using A::A; ; // defines B::B(int)
B b(42); // OK

但是,Visual Studio 2013 不支持它,如 msdn 中所述。

【讨论】:

【参考方案2】:

如您所见here,继承构造函数是 Microsoft Visual Studio 尚不支持的 C++11 功能。

您发布的代码是正确的,works 符合 C++11 编译器的预期。

【讨论】:

【参考方案3】:

编译器尝试调用默认的Child 构造函数(不带参数)。因此,要使您的代码正常工作,您需要提供显式构造函数:

struct Child : public Base
    using Base::Base;
    Child(int i):Base(i) 

;

【讨论】:

你没有抓住重点。 OP 希望他们完全有效的 C++ 代码能够工作,但他们的编译器还不够现代。

以上是关于使用子类的父类构造函数的主要内容,如果未能解决你的问题,请参考以下文章

new子类会先运行父类的构造函数

面向对象:继承抽象类抽象方法虚方法

继承中的构造析构函数调用顺序

JavaScript实现多重继承

条款09:绝不在构造和析构过程中调用virtual函数

java继承形成程序体系