我在大学的家庭作业中遇到以下问题,任务如下:
从MyThickHorizontalLine
获取课程MyLine
。一个要求是派生类MyThickHorizontalLine
的构造函数本身不设置值,而是有义务调用基本构造函数。
目前在我的cpp文件中看起来像这样:
MyThickHorizontalLine::MyThickHorizontalLine(int a, int b, int c)
{
MyLine(a, b, c, b);
}
这是我的Base构造函数:
MyLine::MyLine(int x1, int y1, int x2, int y2)
{
set(x1, y1, x2, y2);
}
MyLine的标题定义:
public:
MyLine(int = 0, int = 0, int = 0, int = 0);
目前的问题是,当我调试这个时,我进入MyThickHorizontalLine
的构造函数,我a
b
c
的值是例如1
{{ 1}} 2
它们被设置在那里,然后当我继续前进并进入Base构造函数时,我的所有值都为零。
我可能在这里错过了关于继承的关键部分,但我无法理解它。
答案 0 :(得分:2)
MyThickHorizontalLine::MyThickHorizontalLine(int a, int b, int c) { MyLine(a, b, c, b); // <<<< That's wrong }
您无法在构造函数体内初始化基类。只需使用成员初始值设定项列表来调用基类构造函数:
MyThickHorizontalLine::MyThickHorizontalLine(int a, int b, int c) : MyLine(a, b, c, b) {}
答案 1 :(得分:1)
除了:
您无法在构造函数体内初始化基类。只需使用成员初始值设定项列表来调用基类构造函数:
换句话说,
MyThickHorizontalLine::MyThickHorizontalLine(int a, int b, int c)
{
MyLine(a, b, c, b); // <<<< This is temporary local object creation, like that one:
MyLine tmp = MyLine(a, b, c, b);
}