Операторы 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
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.