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

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

如果是这样,继承构造函数这个新功能的使用似乎真的很有限。

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

最佳答案

您可以使用默认值:

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

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

关于c++ - 使用C++11继承构造函数时如何初始化派生类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43214962/

相关文章:

C++ 简单交互式 shell 重定向输入时隐藏提示

c++ - 如何使用参数包参数 typedef 函数指针类型

c++ - 如何转换为私有(private)派生的子类型?

java - C++ 中的 "derived"与 Java 中的 "extended"是一回事吗?

javascript - 局部未声明的变量成为全局变量。它们在文档中的什么地方结束了?

c++ - golang 中的 const 方法?

c++ - 在 Linux/Unix 问题 C++ 中编译

c++ - cppcheck 如何抑制内联不匹配抑制?

c++ - 为什么复制省略不适用于 std::move?

c++ - 使用 shared_ptr 时出现段错误