
- •Принципы объектно-ориентированного программирования.
- •Структура класса.
- •Свойства.
- •Статические и виртуальные методы.
- •Перезагружаемые методы.
- •Конструкторы и деструкторы.
- •Интегрированная среда разработки Delphi.
- •Визуальные средства разработки.
- •Программирование с управлением по событиям.
- •Абстрактный метод.
- •Методы класса.
- •Исключительные ситуации.
- •Атрибуты доступа в Delphi.
- •Обработка исключительных ситуаций.
- •Библиотека визуальных компонентов в Delphi (vcl).
- •Ссылки на классы.
- •Указатели на методы.
- •Фреймы и шаблоны компонентов.
- •Delphi 2009: отличия от предыдущих версий.
- •Классы и модули.
- •Модули и программы.
- •Информация о типе во время выполнения.
- •Полиморфизм и виртуальные методы.
Перезагружаемые методы.
Идентичные методы – одно и то же количество параметрови одинаковые типы параметров.
1.Несколько одноименных методов с различными параметрами
2.Желательно, чтобы все методы у предков и потомков были доступны
Перезагрузка – overload
Перекрытие – override
Unit over1;
Interface
Uses Dialogs;
Type OverM = class
Procedure math(s:real);overload;
Procedure math(s:string);overload;
Procedure math(s;string;i:integer); overload;
End;
// описание процедур;
Var v_over:OverM;
V_over.math(1); V_over.math(aa);
Есть еще одна, совершенно особенная разновидность методов — перегружаемые.
Эту категорию методов нельзя назвать антагонистом двух предыдущих: и статические, и виртуальные, и динамические методы могут быть перегружаемыми. Перегрузка методов нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными.
Рассмотрим немного измененный пример, иллюстрирующий статические методы:
type
TlstObj = class
FExtData : Extended;
procedure SetData(AValue: Extended);
end;
T2ndObj = class(TlstObj)
FIntData : Integer;
procedure SetData(AValue: Integer);
end;
var
Tl: TlstObj;
T2 : T2ndObj;
В этом случае попытка вызова из объекта Т2 методов
...
Т2.SetData (1.0);
Т2.SetData(1);
...
вызовет ошибку компиляции на первой из двух строк. Для компилятора внутри Т2 статический метод с параметром типа extended перекрыт, и он его "не признает". Где же выход из сложившегося положения? Переименовать один из методов, например создать SetlntegerData и SetExtendedData? Можно, но если методов не два, а, скажем, сто, моментально возникнет путаница. Сделать методы виртуальными? Нельзя, поскольку тип и количество параметров в одноименных виртуальных методах должны в точности совпадать. Теперь для этого существуют перегружаемые методы, объявляемые при помощи директивы overload:
type
TlstObj = class
FExtData : Extended;
procedure SetData(AValue: Extended);overload;
end;
T2ndObj = class(TlstObj)
FIntData : Integer;
procedure SetData(AValue: Integer); overload;
end;
Объявив метод SetData перегружаемым, в программе можно использовать обе его реализации одновременно. Это возможно потому, что компилятор определяет тип передаваемого параметра (целый или с плавающей точкой) и в зависимости от этого подставит вызов соответствующего метода: для целочисленных данных — метод объекта T2ndobj, для данных с плавающей точкой — метод объекта Tistobj.
Можно перегрузить и виртуальный (динамический) метод. Надо только в этом случае добавить директиву reintroduce:
type
TlstObj = class
FExtData : Extended;
procedure SetData(AValue: Extended); overload; virtual;
end;
T2ndObj = class(TlstObj)
FIntData : Integer;
procedure SetData(AValue: Integer); reintroduce; overload;
end;
На перегрузку методов накладывается ограничение — нельзя перегружать методы, находящиеся в области видимости published, т. е. те, которые будут использоваться в Инспекторе объектов.