Перегрузка имен подпрограмм (PascalABC.NET): различия между версиями
(Новая страница: «{{TOCRight}} Слово «перегрузка» здесь никак не связано с увеличением ускорения свыше земного...») |
|||
Строка 1: | Строка 1: | ||
{{TOCRight}} | {{TOCRight}} | ||
− | Слово «перегрузка» здесь никак не связано с увеличением ускорения свыше земного g. Правильнее, наверно, было бы использовать термин «перезагрузка», но что поделать? Потребность в перегрузке имен возникает, когда подпрограмма может иметь различный набор параметров. Пусть нам нужна функция Sпр(a, b), умеющая находить площадь прямоугольника со сторонами a, b и возвращать ее значение с типом integer, если оба параметра типа integer и с типом real в прочих случаях. Как быть – называть функции разными именами? Перегрузка позволяет обойтись одним. | + | Слово «перегрузка» здесь никак не связано с увеличением ускорения свыше земного g. Правильнее, наверно, было бы использовать термин «перезагрузка», но что поделать? Потребность в перегрузке имен возникает, когда подпрограмма может иметь различный набор параметров. |
+ | |||
+ | Пусть нам нужна функция Sпр(a, b), умеющая находить площадь прямоугольника со сторонами a, b и возвращать ее значение с типом integer, если оба параметра типа integer и с типом real в прочих случаях. Как быть – называть функции разными именами? Перегрузка позволяет обойтись одним. | ||
<syntaxhighlight lang="pascal" line> | <syntaxhighlight lang="pascal" line> |
Текущая версия на 20:29, 21 мая 2023
Слово «перегрузка» здесь никак не связано с увеличением ускорения свыше земного g. Правильнее, наверно, было бы использовать термин «перезагрузка», но что поделать? Потребность в перегрузке имен возникает, когда подпрограмма может иметь различный набор параметров.
Пусть нам нужна функция Sпр(a, b), умеющая находить площадь прямоугольника со сторонами a, b и возвращать ее значение с типом integer, если оба параметра типа integer и с типом real в прочих случаях. Как быть – называть функции разными именами? Перегрузка позволяет обойтись одним.
1 function Sпр(a, b: integer) := a * b;
2
3 function Sпр(a, b: real) := a * b;
4
5 begin
6 var a := Sпр(3, 7);
7 var b := Sпр(2.5, 5);
8 Print(a, b)
9 end.
21 12.5
Чем отличаются описания функций? Типами параметров. Эти типы и являются основой для перегрузки имен. Если типы аргументов полностью совпадают с одним из описаний, именно это описание будет выбрано. Если точного совпадения нет – компилятор попробует выполнить приведение типа аргументов. Поэтому в примере в первом случае вызывается первая функция, во втором – вторая.
Тип результата в перегрузке имен не участвует.