Курсовая работа: Программа для решения дифференциальных уравнений первого порядка методом Рунге-Кутта
st := '';
for i:=l to SZL do // SZL - размер массива-списка
if list[i] о NIL
then st := st + list[i].Info
+ #13; ShowMessage (st);
Во время работы программы каждый элемент массива может содержать как объект типа xstud, так и объект типа TProf. Концепция полиморфизма обеспечивает применение к объекту именно того метода, который соответствует типу объекта.
Перегрузка методов
Есть еще одна, совершенно особенная разновидность методов — перегружаемые.
Перегрузка методов нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными.
Пример, иллюстрирующий статические методы:
type
TlstObj = class
FExtData : Extended;
procedure SetData(AValue: Extended);
end;
T2ndObj = class(TlstObj)
FIntData : Integer;
procedure SetData(AValue: Integer); end;
var T1: 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;