C ++继承:将数据传递给Base

时间:2013-11-22 05:13:17

标签: c++ inheritance

需要一些关于继承的学校项目的帮助。层次结构如下: [形状]< - [四边形]< - [GenRectangle]

GenRectangle有一个构造函数,它接受一个Color对象(使用Color.H)

GenRectangle(GenPoint ul, GenPoint lr, Color c)

我不确定如何使用给定的方法将Color c一直传递给Shape。我在考虑使用类似的东西:

GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(___, ___, ___, ___, c)

但我不知道该把什么放在空白处。可以肯定的是,这是一个死路一条。我的老师通常不会在周末回复电子邮件,因此我一直试图自己解决这个问题。我的笔记向我展示了我的上述尝试,但仅限于一个级别的继承,而不是三个。这里是我必须使用的.H文件:

GenRectangle.h

class GenRectangle: public Quadrilateral
{

  public:
    GenRectangle();
    GenRectangle(GenPoint ul, GenPoint lr, Color c);
    void setPoints(GenPoint ul, GenPoint lr);
    double getArea();
    void print();
};

Quadrilateral.h

class Quadrilateral : public Shape
{
  protected:

    GenPoint a;
    GenPoint b;
    GenPoint c;
    GenPoint d;


  public:
    Quadrilateral();
    Quadrilateral(GenPoint a, GenPoint b, GenPoint c, GenPoint d, Color color);
    void setPoints(GenPoint a, GenPoint b, GenPoint c, GenPoint d);
    double getPerimeter();
    void print();
    void draw();
};

Shape.h

class Shape
{
  protected:
    Color color;

  public:
    Shape();
    Color getColor();
    void setColor(Color color);
    virtual double getPerimeter() = 0;
    virtual void print()= 0;
    virtual void draw() = 0;

};

编辑: 此外,我是否应该将GenRectangle中的数据字段传递给Quadrilateral,无论是否尝试设置GenRectangles继承的数据字段?

此:

GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(ul, GenPoint(lr.x,ul.y) , lr, GenPoint(u1.x, lr.y), c)
{
    this->a.setPoint(ul.getX(), ul.getY());
    this->b.setPoint(lr.getX(), ul.getY());
    this->c.setPoint(lr.getX(), lr.getY());
    this->d.setPoint(ul.getX(), lr.getY());


}

或者这个:

GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(ul, GenPoint(lr.x,ul.y) , lr, GenPoint(u1.x, lr.y), c)
{

}

2 个答案:

答案 0 :(得分:0)

你在调用基础构造函数(我认为你能做到)或简单的数学方面有问题吗?

GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(ul, GenPoint(lr.x, ul.y), lr, GenPoint(u1.x, lr.y) c) 

答案?

答案 1 :(得分:0)

这似乎是一个几何问题。

四边形由四个顶点定义。由于其对称性而使得两个点的矩形平行或垂直于轴。

 (p1)------------(p4)
  |               |
  |               |
 (p2)------------(p3)

我认为您已在GenRectangle中输入了p1和p3。

要获得p2和p4,请使用以下公式。

p2.x = p1.x
p2.y = p3.y

p4.x = p3.x
p4.y = p1.y

使用这种关系,你应该能够得到另外两个点(p2和p4)以四边形传递。我希望他们的命令很重要。所以,照顾好它。

在你的情况下

GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(ul, GenPoint(ul.x, lr.y), GenPoint(lr.x,ul.y), lr, c)

您可以处理订单。