C++11 C++;:如何在不定义参数化构造函数的情况下正确初始化基类成员变量?
场景1:没有编译问题。使用初始化列表在派生类中初始化基类时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
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
包含一个虚拟函数,它不再是一个聚合,因此不能像那样初始化它