Библиотека программиста

«Любой дурак может написать программу, которую поймет компилятор. Хорошие программисты пишут программы, которые смогут понять другие программисты»

Мартин Фаулер

Главная страница > Язык Object Pascal > 19. Перегрузка подпрограмм

19. Перегрузка подпрограмм

В одной и той же области видимости описаний (scope) можно объявить несколько подпрограмм с одним и тем же именем (overloading routines). Эти подпрограммы должны иметь отличающиеся списки формальных параметров и директиву overload. Пример:

function Divide(X, Y: Real): Real; overload;

begin

Result := X/Y;

end;

function Divide(X, Y: Integer): Integer; overload;

begin

Result := X div Y;

end;

Теперь при вызове функции Divide компилятор выбирает ту или иную ее реализацию в соответствии с типами фактических параметров.

Списки формальных параметров перегружаемых подпрограмм должны отличаться по числу или типам. Таким образом, следующая пара описаний вызовет ошибку компиляции:

function Cap(S: string): string; overload;

procedure Cap(var Str: string); overload;

В то же время описания

function Func(X: Real; Y: Integer): Real; overload;

function Func(X: Integer; Y: Real): Real; overload;

являются допустимыми.

Если перегружаемые подпрограммы имеют параметры по умолчанию (default parameters) надо проявлять осторожность для того, чтобы не было неоднозначности. При вызове перегружаемой подпрограммы можно указывать ее уточненное имя для того, чтобы избежать нежелательных эффектов, например, Unit1.MyProcedure(X,Y). Если при этом в модуле Unit1 не окажется нужной подпрограммы, компилятор сообщит об ошибке. Перегрузку подпрограмм можно также применять к методам объектов.





<< Предыдущая статья
«18. Описания подпрограмм»
Следующая статья >>
20. Параметры подпрограмм