C++ 如何在使用C++;11个继承构造函数?

C++ 如何在使用C++;11个继承构造函数?,c++,c++11,inheritance,constructor,C++,C++11,Inheritance,Constructor,关于新的C++11特性继承基类的构造函数,有一点我不理解: using BaseClass::BaseClass; 我认为这是一个方便的特性,但现在我有了一个派生类,它有额外的成员,如果我想初始化派生类的成员,我似乎必须重写构造函数: struct BaseClass { BaseClass(char* name, int intVal, float floatVal) : name(name), intVal(intVal), floatVal(floatVal) {} ch

关于新的C++11特性继承基类的构造函数,有一点我不理解:

using BaseClass::BaseClass;
我认为这是一个方便的特性,但现在我有了一个派生类,它有额外的成员,如果我想初始化派生类的成员,我似乎必须重写构造函数:

struct BaseClass
{
    BaseClass(char* name, int intVal, float floatVal) : name(name), intVal(intVal), floatVal(floatVal) {}
    char* name;
    int intVal;
    float floatVal;
};

struct DerivedClass : BaseClass
{
    using BaseClass::BaseClass;
    int additionalMember;
};
我是否必须手动重写构造函数并将值传递给基的构造函数,然后初始化附加成员

struct DerivedClass : BaseClass
    {
        DerivedClass(char* name, int intVal, float floatVal) : BaseClass(name, intVal, floatVal), additionalMember(7) {}
        int additionalMember;
    };
如果是这样的话,继承构造函数这一新特性的使用似乎真的很有限


那么我每次都必须重写构造函数吗?

您可以使用默认值:

struct DerivedClass : BaseClass
{
    using BaseClass::BaseClass;
    int additionalMember = 0;
};

但是,如果需要从类的用户传递的值,则必须为
DerviedClass

提供构造函数。是的,每次都必须重写构造函数。和你在其他语言中所说的一样。您可能可以通过聚合初始化来解决问题,但这要求您永远不要为任何类和子类定义构造函数(然后隐式声明),对于您的用例来说,这可能不是一个合理的选项。您会期望什么?@n.m.我对这个功能不熟悉。我首先认为这是一个极好的特性。然后,当我遇到这个问题时,我认为它确实是有限的,就像通常在创建子类时一样,您正在添加需要初始化的功能(成员)。@TitoneMaurice:基类构造函数如何知道如何初始化派生类成员?这不是合乎逻辑的期望。@TitoneMaurice通常只添加或重写函数,而不是数据成员。在其他时候,新数据成员将具有可接受的默认构造函数或类内初始化器。