![]() |
|
#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 Реализацию всех методов напишешь сам. По сути, можно все методы трансформации тоже сделать виртуальными и перекрывать для каждого класса, но по сути они делают одно и то же, так что нет смысла. А обращаться к объектам можно именно как к базовому классу (ну за исключением случая, когда ты хочешь у закрашенного квадрата поменять цвет закраски). |