如何在使用C ++ 11继承构造函数时初始化派生类成员?

时间:2017-04-04 18:30:09

标签: 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) {}
    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;
    };

如果是这样,继承构造函数的这一新功能的使用似乎非常有限。

所以我每次都要重写构造函数吗?

1 个答案:

答案 0 :(得分:2)

您可以使用默认值:

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

但是,如果您需要从班级用户传递的值,则必须提供DerviedClass的构造函数。