派生类中的默认构造函数

时间:2015-05-16 18:52:27

标签: c++ inheritance polymorphism

我正在考试我的旧考试去学习决赛并注意到一些我仍然不理解的东西。

class Shape
{
  private:
  int center_x, int center_y;
  public:
  Shape (int x, int y) : center_x(x), center_y(y); {} //constructor initializer
}
class Rectangle : public Shape
{
  private:
  int length, width;
  public:
  Rectangle(): //this is where i have trouble, I am supposed to fill in missing code here
  //but shape does not have a default constructor, what am i supposed to fill in here?
  Rectangle (int x, int y, int l, int w) : Shape(x,y);{length = l; width = w;}
}

由于

3 个答案:

答案 0 :(得分:5)

有两种方法。您可以在默认构造函数的mem-initializer列表中调用基类construcor,并使用一些默认值(例如,我使用零作为默认值):

Rectangle() : Shape( 0, 0 ), length( 0 ), width( 0 ) {}

或者您可以使用参数将默认构造函数中的所有工作委托给构造函数。

例如

Rectangle() : Rectangle( 0, 0, 0, 0 ) {}

考虑到类定义应以分号结束。:)

答案 1 :(得分:1)

你问错了问题。你应该问

  

默认构建Rectangle应该是什么?

回答完这个问题后,将会发生以下情况之一:

  • 将很清楚如何初始化Shape基础
  • 您将意识到Rectangle不应该有默认构造函数
  • 你会意识到需要重新设计的东西

答案 2 :(得分:0)

您可以假设没有为默认矩形定义坐标。所以它会是:

Rectangle(): Shape(x,y) , length(0), width(0) { }