1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Иерархия Классов Для Представления Геометрических Фигур

Тема в разделе "Вопросы новичков и не только", создана пользователем shilovec5377, 20 июн 2014.

  1. shilovec5377

    shilovec5377 Member

    Репутация:
    0
    Регистрация:
    13 апр 2012
    Сообщения:
    12
    Симпатии:
    0
    Всем привет.

    На данном этапе просто хочу убедиться, что наследование реализовано корректно. Но когда пробую вызвать GetName, то возвращается только geometry. Остальные значения - пустые. Подорзреваю, что это из-за того, что неправильно работают конструкторы.
    Как это исправить?

    Т.е., я хочу добиться того, чтобы на данном этапе программа выдавала

    geometry
    polyline
    polygon
    ellipse
    rectangle
    а не только geometry (а затем 4 пустые строки).

    Условие задачи
    Разработать иерархию классов для представления геометрических
    фигур: прямая, ломанная, прямоугольник, эллипс, многоугольник.
    Разработать контейнер для хранения фигур.
    Контейнер для хранения фигур реализовать в виде интерфейса с
    общими методами для всех фигур. Классы каждой из фигур должны быть
    реализацией данного интерфейса.

    Код:
    program Project2;
    
    {$APPTYPE CONSOLE}
    
    uses
    SysUtils;
    
    type
    
    // Описание интерфейса
    
    //
    
    // Класс геометрии - общий класс всей иерархии
    
    TGeometry = class(TInterfacedObject)
    
    FName: String;	// поля
    //Length: Real;
    
    function GetName: String; virtual; // методы
    
    procedure SetName(N: String); virtual;
    
    constructor Create(N: String);
    
    procedure SetXY;
    
    end;
    
    procedure TGeometry.SetXY;
    begin
    end;
    
    constructor TGeometry.Create(N: String);
    begin
    FName := N;
    end;
    
    function TGeometry.GetName: String;
    begin
    GetName := FName;
    end;
    
    procedure TGeometry.SetName(N: String);
    begin
    FName := N;
    end;
    
    
    // класс полилинии
    
    type TPolyline = class(TGeometry)
    
    XCoords: Array[1..4] of Integer;
    YCoords: Array[1..4] of Integer;
    Length: Real;
    
    constructor Create(N: String);
    
    procedure SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer; x4: Integer; y4: Integer);
    function GetLength: Real;
    
    function GetName: String; override;
    procedure SetName(N: String); override;
    
    end;
    
    constructor TPolyline.Create(N: String);
    var
    i: Integer;
    begin
    inherited Create(N);
    Length := 0;
    
    for i := 1 to 4 do
    begin
    XCoords[i] := 0;
    YCoords[i] := 0;
    end;
    end;
    
    procedure TPolyline.SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer; x4: Integer; y4: Integer);
    begin
    
    XCoords[1] :=  x1;
    XCoords[2] :=  x2;
    XCoords[3] :=  x3;
    XCoords[4] :=  x4;
    
    YCoords[1] :=  y1;
    YCoords[2] :=  y2;
    YCoords[3] :=  y3;
    YCoords[4] :=  y4;
    
    end;
    
    function TPolyline.GetLength: Real;
    var l: Real;
    begin
    l := Sqrt( Exp(2*(XCoords[2] - XCoords[1])) + Exp(2*(YCoords[2] - YCoords[1])) +
    Exp(2*(XCoords[3] - XCoords[2])) + Exp(2*(YCoords[3] - YCoords[2])) +
    Exp(2*(XCoords[4] - XCoords[3])) + Exp(2*(YCoords[4] - YCoords[3])) );
    
    Length := l;
    GetLength := l;
    
    end;
    
    procedure TPolyline.SetName(N: String);
    begin
    inherited SetName(N);
    end;
    
    function TPolyline.GetName: String;
    begin
    inherited GetName;
    end;
    
    // класс линии
    
    type TLine = class(TPolyline)
    
    constructor Create(N: String);
    
    procedure SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer);
    function GetLength:Real;
    
    function GetName: String; override;
    procedure SetName(N: String); override;
    
    end;
    
    constructor TLine.Create(N:String);
    begin
    
    XCoords[1] :=  0;
    XCoords[2] :=  0;
    
    YCoords[1] :=  0;
    YCoords[2] :=  0;
    
    end;
    ///////////////////////////////////////////////////////
    function TLine.GetName:String;
    begin
    inherited GetName;
    end;
    
    
    procedure TLine.SetName(N:String);
    begin
    inherited SetName(N);
    end;
    ////////////////////////////////////////
    
    procedure TLine.SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer);
    begin
    
    XCoords[1] :=  x1;
    XCoords[2] :=  x2;
    
    YCoords[1] :=  y1;
    YCoords[2] :=  y2;
    
    end;
    
    function TLine.GetLength:Real;
    var
    l: Real;
    begin
    
    l := Sqrt( Exp(2*(XCoords[2] - XCoords[1])) + Exp(2*(YCoords[2] - YCoords[1])) );
    Length := l;
    
    GetLength := l;
    end;
    
    
    // класс полигона
    
    type TPolygon = class(TGeometry)
    
    XCoords: Array[1..5] of Integer;
    YCoords: Array[1..5] of Integer;
    
    function GetArea: Real;
    
    function GetName: String; override;
    procedure SetName(N: String); override;
    
    procedure SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer; x5: Integer; y5: Integer);
    
    constructor Create(N: String);
    
    end;
    
    function TPolygon.GetArea: Real;
    begin
    GetArea := 0;
    end;
    
    function TPolygon.GetName: String;
    begin
    inherited GetName;
    end;
    
    procedure TPolygon.SetName(N:String);
    begin
    inherited SetName(N);
    end;
    
    procedure TPolygon.SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer; x5: Integer; y5: Integer);
    begin
    
    XCoords[1] :=  x1;
    XCoords[2] :=  x2;
    XCoords[3] :=  x3;
    XCoords[4] :=  x4;
    XCoords[5] :=  x5;
    
    YCoords[1] :=  y1;
    YCoords[2] :=  y2;
    YCoords[3] :=  y3;
    YCoords[4] :=  y4;
    YCoords[5] :=  y5;
    
    end;
    
    constructor TPolygon.Create(N: String);
    begin
    
    inherited Create(N);
    
    XCoords[1] :=  0;
    XCoords[2] :=  0;
    XCoords[3] :=  0;
    XCoords[4] :=  0;
    XCoords[5] :=  0;
    
    YCoords[1] :=  0;
    YCoords[2] :=  0;
    YCoords[3] :=  0;
    YCoords[4] :=  0;
    YCoords[5] :=  0;
    
    end;
    
    // класс эллипса
    
    type TEllipse = class(TPolygon)
    
    //XCoords: Array[1..4] of Integer;
    //YCoords: Array[1..4] of Integer;
    
    function GetArea: Real;
    
    function GetName: String; override;
    procedure SetName(N: String);  override;
    
    procedure SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer);
    
    constructor Create(N: String);
    
    end;
    
    constructor TEllipse.Create(N: String);
    begin
    
    inherited Create(N);
    
    XCoords[1] :=  0;
    XCoords[2] :=  0;
    XCoords[3] :=  0;
    XCoords[4] :=  0;
    
    YCoords[1] :=  0;
    YCoords[2] :=  0;
    YCoords[3] :=  0;
    YCoords[4] :=  0;
    
    end;
    
    function TEllipse.GetArea: Real;
    begin
    GetArea := 1;
    end;
    
    function TEllipse.GetName: String;
    begin
    inherited GetName;
    end;
    
    procedure TEllipse.SetName(N:String);
    begin
    inherited SetName(N);
    end;
    
    procedure TEllipse.SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer);
    begin
    
    XCoords[1] :=  x1;
    XCoords[2] :=  x2;
    XCoords[3] :=  x3;
    XCoords[4] :=  x4;
    
    YCoords[1] :=  y1;
    YCoords[2] :=  y2;
    YCoords[3] :=  y3;
    YCoords[4] :=  y4;
    
    end;
    
    // класс прямоугольника
    
    type TRectangle = class(TPolygon)
    
    //XCoords: Array[1..4] of Integer;
    //YCoords: Array[1..4] of Integer;
    
    function GetArea: Real;
    
    function GetName: String; override;
    procedure SetName(N: String); override;
    
    procedure SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer);
    
    constructor Create(N: String);
    
    end;
    
    constructor TRectangle.Create(N: String);
    begin
    
    inherited Create(N);
    
    XCoords[1] :=  0;
    XCoords[2] :=  0;
    XCoords[3] :=  0;
    XCoords[4] :=  0;
    
    YCoords[1] :=  0;
    YCoords[2] :=  0;
    YCoords[3] :=  0;
    YCoords[4] :=  0;
    
    end;
    
    procedure TRectangle.SetXY(x1:Integer; y1:Integer; x2: Integer; y2: Integer; x3: Integer; y3: Integer;
    x4:Integer; y4:Integer);
    begin
    
    XCoords[1] :=  x1;
    XCoords[2] :=  x2;
    XCoords[3] :=  x3;
    XCoords[4] :=  x4;
    
    YCoords[1] :=  y1;
    YCoords[2] :=  y2;
    YCoords[3] :=  y3;
    YCoords[4] :=  y4;
    
    end;
    
    function TRectangle.GetName: String;
    begin
    inherited GetName;
    end;
    
    procedure TRectangle.SetName(N:String);
    begin
    inherited SetName(N);
    end;
    
    function TRectangle.GetArea: Real;
    var
    A: Real;
    begin
    A := (XCoords[4] - XCoords[1]) * (YCoords[2] - YCoords[1]);
    GetArea := A;
    end;
    
    var
    
    geom, polyline, polygon, line, ellipse, rectangle: TGeometry;
    
    n: String;
    a: Integer;
    
    begin
    
    geom := TGeometry.Create('geometry');
    n := geom.GetName;
    WriteLn(n);
    
    //polyline
    polyline := TPolyline.Create('polyline');
    n := polyline.GetName;
    WriteLn(n);
    //polygon
    polygon := TPolyline.Create('polygon');
    n := polygon.GetName;
    WriteLn(n);
    //ellipse
    ellipse := TEllipse.Create('ellipse');
    n := ellipse.GetName;
    WriteLn(n);
    //rectangle
    rectangle := TRectangle.Create('rectangle');
    n := rectangle.GetName;
    WriteLn(n);
    
    ReadLn;
    
    end.
     
Загрузка...
Похожие Темы - Иерархия Классов Для
  1. wasp
    Ответов:
    7
    Просмотров:
    1.155
  2. NickProstoNick
    Ответов:
    4
    Просмотров:
    1.248
  3. NickProstoNick
    Ответов:
    6
    Просмотров:
    3.400
  4. collection
    Ответов:
    1
    Просмотров:
    2.415
  5. NickProstoNick
    Ответов:
    2
    Просмотров:
    556

Поделиться этой страницей