![]() |
|
|
|
|
#1
|
||||
|
||||
|
Помогите пожалуйста! Уже 2 недели не могу написать программу.
Задание: Реализовать следующие иерархии объектов и заданные методы для них. На примере этих объектов продемонстрировать позднее связывание и полиморфизм. Отрезок – квадрат – закрашенный квадрат, равносторонний треугольник Методы: сжатие, растяжение, поворот, движение. Вот пример: Точка - Окружность - Многоугольник Методы:сжатие, растяжение, поворот, движение.(прога прикреплена файлом) |
|
#2
|
|||
|
|||
|
Ну и в чем проьблема?
Ты можешь задать квадрат 2-мя точками? вот тебе и базовый класс. Код:
type
TShapeBase = class
private
FTopLeft : TPoint;
FBottomRight : TPoint;
public
constructor Create(ATopLeft, ABottomRight : TPoint); virtual;
procedure Stretch(APoint : TPoint; K : Double);
procedure Rotate(APoint : TPoint; AAngle : Double);
procedure Move(AShift : TPoint);
procedure Draw; virtual; abstract;
property TopLeft : TPoint read FTopLeft;
property BottomRight : TPoint read FBottomRight;
end;
TLine = class(TShapeBase)
public
procedure Draw; override;
end;
TSquare = class(TLine)
public
procedure Draw; override;
end;
TFilledSquare = class(TSquare)
private
FFillColor : TColor;
public
constructor Create(ATopLeft, ABottomRight : TPoint; AFillColor : TColor); virtual;
procedure Draw; override;
property FillColor : TColor read FFillColor write FFillColor;
end;
implementationРеализацию всех методов напишешь сам. По сути, можно все методы трансформации тоже сделать виртуальными и перекрывать для каждого класса, но по сути они делают одно и то же, так что нет смысла. А обращаться к объектам можно именно как к базовому классу (ну за исключением случая, когда ты хочешь у закрашенного квадрата поменять цвет закраски). |