派生类可以调用基类构造函数与可选参数?



如果我有一个带有构造函数的基类:

class Base{
Base(std::optional<type0> a, std::optional<type1> b, std::optional<type2> c, std::optional<type3> d) : _a(a), _b(b), _c(c), _d(d)  { }
    private:
    std::optional<type0> _a;
    std::optional<type1> _b;
    std::optional<type2> _c;
    std::optional<type3> _d;
};

我的派生类是否可以仅使用某些值派生此构造函数并将其自动映射到正确的值?例如,如果我这样做:

class Derived{
    Derived(std::optional<type1> b, std::optional<type3> d) : Base(b, d) { }
};

会自动映射b to _bd to _d吗?

我的派生类是否可以仅使用某些值派生此构造函数并将其自动映射到正确的值?

不,必须传递与基类构造函数的每个形参相对应的实参,除非其中一些具有默认实参。这意味着在你的例子中,在派生类ctor的初始化列表中,我们应该传递4个参数,对应于基类ctor的a, b, cd

遗憾的是,在c++中不是这样的。

在Base构造函数的定义中,必须以相同的顺序传递所有参数。

顺便说一句,std::optional并不是你想的那样。最优意味着变量可以包含值,也可以不包含值。这并不意味着你不能选择性地将值作为参数传递。

相关内容

最新更新