Перезагрузка методов.
Четвертая группа методов – перезагружаемые (Overload). Заметим, что и виртуальные и динамические методы могут быть перезагружаемыми. Перезагрузка нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными. Статический метод перекрытия приводит к тому, что потомок «не видит» перекрытый родительский метод и может обращаться к нему только с помощью слова inherited, поэтому в Delphi используется перезагрузка, с помощью которой становятся видны одноименные методы как родителя, так и потомка.
Пример:
Type TFirst=class
i:Extended;
procedure SetData(x:Extended);
end;
TSecond=class(TFirst)
j:Integer;
procedure SetData(AValue:Integer);
end;
. . . . .
var T2:TSecond;
. . . . .
begin
T2.SetData (1.1); (1)
T2.SetData (1); (2)
В этом примере первый вызов метода SetData из объекта T2 с переменной =1.1 (не целая) вызовет ошибку! А второй вызов не приводит к ошибке, т.к. внутри объекта T2 статический метод с параметром типа Extended перекрыт одноименным методом с параметром типа Integer. Компилятор внутри T2 не признает параметр типа Extended.
Для доступа к методу SetData класса TFirst необходимо использовать служебное слово inherited. Например:
procedure TSecond.SetData;
begin
x :=1.1;
inherited SetData (x);
j:=x;
end;
Но нам нужно произвести схожие действия (1), (2) с разнотипными данными в строках одной программы.
Может быть, метод сделать виртуальным?
Нет, нельзя! Поскольку тип и количество параметров в одном и том же виртуальном методе должны в точности совпадать.
Начиная с версии Delphi4 появилась возможность перезагрузить методы (overload), это позволяет видеть одноименные методы как родителя, так и потомка. Чтобы одноименные методы можно было отличить друг от друга, каждый из них должен иметь уникальный набор параметров. В ходе компиляции при обращении к одному из одноименных методов компилятор проверяет тип и количество параметров обращения и на основе этой проверки выбирает нужный метод.
Overload – директива, позволяющая перезагрузить методы:
Type TFirst=class
i:Extended;
procedure SetData(x:Extended); Overload;
end;
TSecond=class(TFirst)
j:Integer;
procedure SetData(AValue:Integer); Overload;
end;
. . . . .
var T2:TSecond;
. . . . .
Теперь в программе можно использовать метод как родителя, так и потомка.
begin
T2.SetData (1.1);
T2.SetData (1);
Можно перезагрузить и виртуальный, и динамический методы. В этом случае надо добавить директиву reintroduce перед директивой overload.
- Объектно-ориентированный анализ
- Объектно-ориентированное программирование.
- Объектно-ориентированное проектирование.
- Основные понятия объектно-ориентированного проектирования.
- Классы и объекты в Object Pascal.
- Важнейшие принципы объектно-ориентированного программирования.
- Составляющие класса.
- Объекты
- Создание и уничтожение объектов.
- Наследование конструкторов и деструкторов.
- Свойства и инкапсуляция.
- Статические методы.
- Полиморфизм. Виртуальные и динамические методы.
- Абстрактные методы.
- Перекрытие виртуальных и динамических методов.
- Как устроен объект изнутри
- Перезагрузка методов.
- Задача с использованием полиморфизма
- Области видимости.
- Создание класса комплексных чисел.
- Создание класса векторов
- Объект-список
- Модуль по работе со списками
- Основная программа по работе с объектами-списками
- Система программирования Delphi
- Терминология Delphi.
- Первые шаги визуального программирования в среде Delphi.
- Иерархия компонентов.
- Собственники компонентов
- Элементы управления.
- Компоненты (tComponent)
- Оконные не оконные
- Родительские и дочерние компоненты.
- Объектно-событийное программирование. События
- Реакции на события
- Программирование реакции на событие
- Особенности реализации событий
- Делегирование событий
- Виды событий
- Диалоги. Работа с файлами. Открытие и закрытие файлов с использованием стандартных диалоговых окон.
- TOpenDialog и tSaveDialog – диалоги открытия и сохранения файлов (страница dialogs )
- Компонент класса tform
- Создание и использование форм
- Шаблоны форм
- Программы со многими формами
- Модульный принцип построения программ.
- Программные файлы. Основные типы файлов проекта. Простейшее приложение.
- Структура головного файла проекта.