派生类中的基本构造函数调用
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);
【讨论】:
以上是关于派生类中的基本构造函数调用的主要内容,如果未能解决你的问题,请参考以下文章