需要一些关于继承的学校项目的帮助。层次结构如下: [形状]< - [四边形]< - [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)
{
}
答案 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)
您可以处理订单。