【问题标题】:inheritance and initializer list in c++C++中的继承和初始化列表
【发布时间】:2021-07-27 02:18:11
【问题描述】:

如上图所示:类 Triangle 继承自类 Shape 但是为什么在初始化列表中写了 Shape() ,如果我把它省略了会发生什么?

【问题讨论】:

  • 请将代码放入问题中。
  • 我尝试将您的代码粘贴到我的 IDE 中,但我的 IDE 无法从图像中提取代码。没有代码作为文本 == 没有帮助。

标签: c++ class inheritance initializer-list


【解决方案1】:

如果你不放它,它仍然会调用默认的父类构造函数。但是,如果父构造函数具有关键字“explicit”,或者如果没有默认父构造函数因此您需要将参数传递给它,则可能需要像这样显式放置它。..

【讨论】:

    【解决方案2】:

    您的派生 Triangle 类如下所示:

    class Triangle : public Shape {
      Point _x1, _x2, _x3;
    public:
      Triangle(const Point& x1, const Point& x2, const Point& x3)
        : Shape(), _x1(x1), _x2(x2), _x3(x3)
      {}
    };
    

    基类Shape 有自己的“做事”的默认构造函数。实际上,那是什么并不重要;您只想确保Shape 的构造函数确实被调用,以便它可以在构造/初始化期间执行它需要执行的任何操作。这可能是设置一些初始值,将一些调试信息记录到控制台,或者调用其自己的父类的构造函数(如果有的话)。

    因此,在构造Triangle时,也需要显式告诉其基类Shape进行构造。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      相关资源
      最近更新 更多