Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Иерархия классов

431
29 ноября 2008 года
sherry
207 / / 16.10.2006
Доброго времени суток! Народ, столкнулся с трудностью: что такое иерархия классов и как ею пользоваться? Основная задача состоит в следующем:
Цитата:

Создать иерархию классов четырехугольник и квадрат.
Переопределить вывод в поток и ввод из потока, конструктор
копирования, оператор присваивания через соответствующие
функции базового класса.


Взываю к Вашей помощи. Зараннее благодарен.

3.7K
29 ноября 2008 года
0nni
326 / / 24.06.2008
может что то типа этого?
 
Код:
Класс-Квадрат
|Класс-Угол
||Класс-Сторона
|end
end
431
29 ноября 2008 года
sherry
207 / / 16.10.2006
0nni
И как пользоваться иерархией? Зачем это, собственно говоря, нужно?..
3.7K
29 ноября 2008 года
0nni
326 / / 24.06.2008
ой не совсем правильный пример.
Ну вот у тебя есть класс TButton, вот его иерархия (те от каких классов он был наследником)
TObject
TPersistent
TComponent
TControl
TWinControl
TButtonControl
TButton

В вашем случае будет что то типа этого
будет прямоугольник и квадрат (квадрат - наследник квадрата)
TRect > TQuad
Код:
program Project1;

{$APPTYPE CONSOLE}

type
  //класс свободный-прямоугольник - содержит в себе информацию о положении
  //и размере черырехугольника
  TCustomRect = class(Tobject)
  private
    //Положение прямоугольника
    FTop: Integer;
    FLeft: Integer;
    //Размеры
    FWidth: Integer;
    FHeight: Integer;
    //Процедуры установки положенмия
    procedure SetLeft(const Value: Integer);
    procedure SetTop(const Value: Integer);
    //Процедуры изменения размера
    procedure SetHeight(const Value: Integer); virtual;
    procedure SetWidth(const Value: Integer); virtual;
  public
    Property Left : Integer read FLeft write SetLeft;
    Property Top : Integer read FTop write SetTop;
    Property Width : Integer read FWidth write SetWidth;
    Property Height : Integer read FHeight write SetHeight;
    function Assign(obj : TCustomRect) : Boolean; virtual;
  end;
  //Квадрат является частным случаем прямоугольника
  //поэтому мы можем использовать класс TCustomRect
  //Немного его модифицировав
  TQuad = Class(TCustomRect)
  private
    //Перезаписываем методы установки ширины и высоты
    //Так что бы  при изменении ширины менялась высота
    //и наоборот
    procedure SetHeight(const Value: Integer); override;
    procedure SetWidth(const Value: Integer); override;
  public
    //Процедура копирования объекта так же переписывается
    //Значения можно присовить только если у TCustomRect
    //Width = Height
    function Assign(obj : TCustomRect) : Boolean; override;
  end;

{ TCustomRect }


function TCustomRect.Assign(obj: TCustomRect): Boolean;
begin
  Result := False;
  if not Assigned(obj) then exit;
  fLeft := obj.FLeft;
  FTop := obj.FTop;
  FWidth := obj.FWidth;
  FHeight := obj.FHeight;
  result := true;
end;

procedure TCustomRect.SetHeight(const Value: Integer);
begin
  FHeight := Value;
end;

procedure TCustomRect.SetLeft(const Value: Integer);
begin
  FLeft := Value;
end;

procedure TCustomRect.SetTop(const Value: Integer);
begin
  FTop := Value;
end;

procedure TCustomRect.SetWidth(const Value: Integer);
begin
  FWidth := Value;
end;


{ TQuad }

function TQuad.Assign(obj: TCustomRect): Boolean;
begin
  Result := False;
  if not Assigned(obj) then exit;
  if (obj.FWidth <> obj.FHeight) then exit;
  //тут мы вызываем метод родителя TCustomRect.Assign()
  //а не TQuad.Assign()
  result := TCustomRect(self).Assign(obj)
end;

procedure TQuad.SetHeight(const Value: Integer);
begin
  FHeight := Value;
  FWidth :=  Value;
end;

procedure TQuad.SetWidth(const Value: Integer);
begin
  FHeight := Value;
  FWidth :=  Value;
end;

begin

end.

Вопросу чувствую будут.
431
29 ноября 2008 года
sherry
207 / / 16.10.2006
0nni
Благодарю!
*сел_разбираться
14
01 декабря 2008 года
Phodopus
3.3K / / 19.06.2008
Мне кажется что требуется создать класс четырехугольник, от него уже унаследовать класс квадрат. Ибо квадрат - частный случай четырехугольника.
261
01 декабря 2008 года
ahilles
1.5K / / 03.11.2005
а может так
четырехугольник->параллелепипед->Ромб->Квадрат

квадрат - частный случай ромба. а ромб это частный случай параллелепипеда
14
01 декабря 2008 года
Phodopus
3.3K / / 19.06.2008
Ну это конечно все хорошо и правильно, но только я в исходном условии параллелепипеда и ромба не вижу..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог