Операторы PASCAL ABC Наследование

  • docx
  • 11.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-00386.docx

Операторы PASCAL ABC

Наследование

Класс может быть унаследован от другого класса. Например, при объявлении

type MyClass=class(BaseClass)
...
end;

класс MyClass наследуется от класса BaseClass.

Класс-потомок называется также производным классом или подклассом, а класс-предок - базовым классом или надклассом. Потомок автоматически наследует все поля и методы своего предка. Он может также определять новые поля и методы, а также переопределять (замещать) методы предка.

Имена полей и методов, объявленные в классе, доступны до конца объявления класса, а также во всех его потомках.

Все классы неявно наследуются от класса Object. Этот класс объявлен следующим образом:

type Object=class
  constructor Create;
  destructor Destroy;
  function TypeName: string;
  function ToString: string;
end;

Таким образом, любой класс может создавать свои объекты, вызывая конструктор Create без параметров, и уничтожать их, вызывая деструктор Destroy, даже если эти методы не приведены в его описании:

var m: MyClass;
...
m:=MyClass.Create;
...
m.Destroy;

В конце работы программы все созданные объекты должны быть разрушены. Поэтому для каждого созданного объекта рекомендуется явно вызвать деструктор. Однако, если этого не сделать, то система Pascal ABC после завершения программы автоматически вызывает деструкторы всех созданных объектов.

Метод TypeName возвращает имя класса объекта, а метод ToString - строковое представление объекта. В классе Object метод ToString также возвращает имя класса объекта, но это поведение может быть переопределено в потомках. Например:

type MyClass=class
  i: integer;
  constructor Create(i: integer);
  begin
    Self.i:=i;
  end;
  function ToString: string;
  begin
    Result:=IntToStr(i);
  end;
end
;
var a: MyClass;
...
a:=MyClass.Create(3);
writeln(a.TypeName); // MyClass
writeln(a.ToString); // 3