c++ 为什么默认构造函数不初始化变量?

0g0grzrc  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(165)

B b(0);被调用时,我希望它调用默认构造函数来初始化受保护的数据成员data_,但它显示错误。

error: no matching function for call to ‘B::B(int)’
candidate expects 0 arguments, 1 provided

D d(1, 2);的情况也是如此。
x一个一个一个一个x一个一个二个x
我应该更改什么来纠正此问题?

uubf1zoe

uubf1zoe1#

默认构造函数是一个可以在没有参数的情况下调用的构造函数,如B()D()。(整数数据=0)或空B(),其中data_的默认值将是int类型的默认值。您调用的构造函数是用户定义的(使用参数B(int)D(int,int)),而用户忘记定义它。每个类负责其引入的新变量,因此DB的构造函数应为:

B(int data) :data_(data) {};
D(int data, int info) :B(data), info_(info) {}; //on data you call constructor of B since B added data_ variable

您的Print()应该是B中的virtual,并且必须是D中的overridden

相关问题