C ++ Наследование: передача данных в базу

0

Нужна помощь в школьном проекте по наследованию. Иерархия выглядит следующим образом: [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)
{

}
  • 0
    Вы говорите, что, учитывая две вершины прямоугольника (выровненные по оси?), Вы не знаете, как получить две другие вершины?
Теги:
inheritance

2 ответа

0

У вас проблемы с вызовом базового конструктора (я думаю, вы можете это сделать) или простой математики?

Является

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

ответ?

0

Это кажется вопросом геометрии.

Четырехугольник определяется четырьмя точками, являющимися его вершинами. Прямоугольник с двумя точками из-за его симметрии и его сторон параллелен или перпендикулярен осям.

 (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)

Вы можете позаботиться о порядке.

  • 0
    Благодарю. Я понимаю координаты для создания фигуры, я просто не знал, как передать точки в базовый класс. Я знал, что каждый из них должен был быть GenPoint, но я не знал, что смогу использовать GenPoint (ul.x, lr.y), чтобы передать эти отдельные x и y. Как только я проверю это, я приму ваш ответ.
  • 0
    Также. Поскольку GenRectangle не имеет никаких полей данных, я должен использовать конструкторы, чтобы установить его унаследованные поля данных, или просто передать их родительскому объекту (в данном случае, четырехугольному). Правка сделана в конце вопроса для уточнения.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню