从圆圈中获取笑脸

时间:2013-12-18 18:31:12

标签: c++

我试图从Circle派生出一个名为Smiley的课程:

struct Smiley : Circle {
  void draw_lines() const;
};

void Smiley::draw_lines() const {
  Circle::draw_lines();   // outline
  /*rest of code here*/
}

这是Circle的定义:

struct Circle : Shape {
  Circle(Point p, int rr);    // center and radius

  void draw_lines() const;

  Point center() const;

  void set_radius(int rr) { set_point(0, Point(center().x - rr, center().y - rr)); r = rr; }
  int radius() const { return r; }
private:
  int r;
};

我基本上想要一个圆圈,顶部绘制几个圆弧。从理论上讲,我只需要写draw_lines()(在Shape中定义为virtual),但如果没有构造函数,它什么也不做,如果我有一个构造函数,它会得到一个错误并说Circle没有可用的默认构造函数,即使构造函数中没有与Circle相关的代码。

有谁知道我收到此错误的原因?

2 个答案:

答案 0 :(得分:2)

当您从没有默认构造函数的类继承时,您必须确保调用非默认构造函数。

否则,派生类尝试调用该不存在的默认构造函数,如错误所示。在这种情况下,您可以直接传递相同的参数。

struct Smiley : Circle {
  Smiley(Point p, int rr);
  void draw_lines() const;
};

Smiley::Smiley(Point p, int rr)
   : Circle(p, rr)
{};

  

我基本上想要一个在顶部绘制几个弧的圆圈

那么它不再是一个圆圈了,为什么Smiley会继承Circle

答案 1 :(得分:1)

您已为圆圈定义了一个需要Point和Radius的构造函数。您应该为Smiley定义一个具有相同参数的参数,它通过Member Initialiser List使用这些参数调用基类构造函数。

struct Smiley : Circle {
  Smiley(Point p, int rr) : Circle(p, rr)
  {
  } 
  void draw_lines() const;
};