派生类中的基本构造函数调用

时间:2016-01-19 00:41:47

标签: c++ inheritance constructor

我在大学的家庭作业中遇到以下问题,任务如下:

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构造函数时,我的所有值都为零。

我可能在这里错过了关于继承的关键部分,但我无法理解它。

2 个答案:

答案 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);
}