C++11 C++;:如何在不定义参数化构造函数的情况下正确初始化基类成员变量?

C++11 C++;:如何在不定义参数化构造函数的情况下正确初始化基类成员变量?,c++11,C++11,场景1:没有编译问题。使用初始化列表在派生类中初始化基类时 class Base { public: int x; }; class D:public Base { public: int y; D(int y1):Base{y1+1},y{y1}{} }; int main() { D d(5); return 0; } 场景2:不编译并请求参数化构造函数。注意基类中的虚拟析构函数 $g++-o main*.c

场景1:没有编译问题。使用初始化列表在派生类中初始化基类时

class Base
{
    public:
        int x;
};
class D:public Base
{
    public:
        int y;
        D(int y1):Base{y1+1},y{y1}{}
};

int main()
{
    D d(5);
    return 0;
}
场景2:不编译并请求参数化构造函数。注意基类中的虚拟析构函数 $g++-o main*.cpp main.cpp:在构造函数“D::D(int)”中: main.cpp:16:34:错误:调用'Base::Base()'时没有匹配的函数 D(inty1):基{y1+1},y{y1}{ ^ main.cpp:5:7:note:candidate:Base::Base() 阶级基础 ^~~~ main.cpp:5:7:注意:候选者需要0个参数,提供1个 main.cpp:5:7:注:候选:constexpr Base::Base(const Base&) main.cpp:5:7:注意:参数1从'int'到'const Base&'没有已知的转换

class Base
{
    public:
    int x;
    virtual ~Base(){}    
};
class D:public Base
{
    public:
        int y;
        D(int y1):Base{y1+1},y{y1}{}
};

int main()
{
    D d(5);
    return 0;
}

Base{y1+1}
是一个。它只适用于聚合。在第二个代码段中,由于
Base
包含一个虚拟函数,它不再是一个聚合,因此不能像那样初始化它