Приведение типов объектов

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

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

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

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

Операторы PASCAL ABC

Приведение типов объектов

Объект производного класса неявно преобразуется к типу базового класса. Например, если у нас имеется класс

type MyClass=class
  procedure print;
end;

то можно инициализировать переменную класса Object объектом класса MyClass:

var o: Object;
...
o:=MyClass.Create;

Теперь в переменной типа Object хранится адрес объекта MyClass. Это можно проверить, вызвав функцию TypeName класса Object:

writeln(o.TypeName); // будет выведено 'MyClass'

Тип классовой переменной, заявленный при описании, принято называть ее статическим типом, а тип объекта, на который ссылается классовая переменная в процессе выполнения программы - ее динамическим типом. Динамический тип может либо совпадать со статическим, либо быть его наследником.

Объект базового класса можно явно преобразовать к типу производного класса. Так, в приведенном выше примере, хотя переменная o ссылается на объект типа MyClass, пользоваться методом print, определенным в классе MyClass, через переменную o нельзя. Чтобы это осуществить, объект базового класса должен быть явно преобразован к объекту производного класса:

var m: MyClass;
...
m=MyClass(o);

После этого, разумеется, можно вызывать любые методы производного класса и обращаться к его полям:

m.print;

При выполнении этого преобразования необходимо, чтобы в переменной o находился именно объект класса MyClass или любого производного от него класса. В противном случае произойдет ошибка при выполнении программы. 


 

Скачано с www.znanio.ru