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

Posted

技术标签:

【中文标题】派生类中的基本构造函数调用【英文标题】:Base Constructor Call in Derived Class 【发布时间】:2016-01-19 00:41:46 【问题描述】:

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

MyLine 派生一个类MyThickHorizontalLine。一个要求是派生类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 2 3 它们被设置在那里,当然后我更进一步,它进入 Base 构造函数,我的所有值都为零。

我可能在这里遗漏了关于继承的关键部分,但我想不通。

【问题讨论】:

【参考方案1】:
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) 

【讨论】:

【参考方案2】:

除了:

你不能在构造函数体内初始化你的基类。只需使用成员初始化器列表来调用基类构造函数:

换句话说,

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);

【讨论】:

以上是关于派生类中的基本构造函数调用的主要内容,如果未能解决你的问题,请参考以下文章

C++如何使用派生类构造函数销毁基类中的对象

派生类中的构造函数

派生类中的静态方法可以在 C++ 中调用受保护的构造函数吗?

派生类中的构造函数和析构函数

虚函数和基类中的this指针的问题!

派生类中的重载构造函数