Нужна помощь в школьном проекте по наследованию. Иерархия выглядит следующим образом: [Shape] <- [Quadrilateral] <- [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)
{
}
У вас проблемы с вызовом базового конструктора (я думаю, вы можете это сделать) или простой математики?
Является
GenRectangle::GenRectangle(GenPoint ul, GenPoint lr, Color c) : Quadrilateral(ul, GenPoint(lr.x, ul.y), lr, GenPoint(u1.x, lr.y) c)
ответ?
Это кажется вопросом геометрии.
Четырехугольник определяется четырьмя точками, являющимися его вершинами. Прямоугольник с двумя точками из-за его симметрии и его сторон параллелен или перпендикулярен осям.
(p1)------------(p4)
| |
| |
(p2)------------(p3)
Я думаю, что вы дали p1 и p3 вход в GenRectangle
.
Для получения 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)
Вы можете позаботиться о порядке.