Помощь - Поиск - Пользователи - Календарь
Полная версия: На обьекты
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
gauss
Создасть класс TFigure с виртуальной функцией площадь, на его основе создать прямоугольник, круг, шестиугольник. А на их основе создать Паралелепипед, шар, и 6-угольную призму. Определить функцию нахождения площадей этих фигур.

Плиззз помогите!
volvo
Ну, в чем проблемы?
Type
  TFigure = object
    constructor init;
    function s: real; virtual;
  end;
{ и определяешь всех потомков: }
  TRectangle = object(TFigure)
    _a, _b: real;

    constructor init(a, b: real);
    function s: real; virtual;
  end;
{ и так далее }

Или ты с объектами не умеешь работать? Тогда тебе для начала сюда:
FAQ: ООП. Объектно-ориентированное программирование
gauss
Я не пойму, как дальше описать все методы и чтобы он вычислял площадь. В примерах там только begin end. =( А там наверное еще и inherited надо использовать?
Volvo, не мог бы хотябы на одном примерчике с прямоугольником показать саму программу. Заранее спасибо.
Извиняюсь за ламерство, все учатся :yessss:
volvo
Описание объектов - смотри выше...
Сами методы:
Constructor TFigure.Init;
Begin { только для корректной инициализации VMT } End;
Function TFigure.s: Real;
Begin s := 0; End; { Абстрактная функция }

Constructor TRectangle.Init(a, b: Real);
Begin 
  Inherited Init; { инициализация предка }
  _a := a; _b := b;
End;
Function TRectangle.s: Real;
Begin s := _a*_b End;

{ Теперь если сделать так... }
Function Get_S(Var Obj: TFigure): Real;
Begin
  Get_S := Obj.s;
End;

Var
  myObj: TRectangle;
Begin
  myObj.Init(2, 3); { <--- Исправлено }
  Writeln(Get_S(myObj));
End.

... то будет вызвана функция S для TRectangle ... :yes:

Добавлено: Смотри исправление, я сразу немного неправильно написал ;)
gauss
Спасибо большое, дальше все сам сделаю smile.gif
Главное с пропасти столкнуть, а крылья сами вырастут (с) Чернышевский
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.