- Перегрузка процедур и функций
-
Перегрузка процедур и функций — возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.
Содержание
Причина появления
В большинстве ранних языков программирования, для упрощения процесса трансляции существовало ограничение, согласно которому одновременно в программе не может быть доступно более одной процедуры с одним и тем же именем. В соответствии этому ограничению, все подпрограммы, видимые в данной точке программы, должны иметь различные имена.
Имена и обозначения процедур и функций, являющихся частью языка программирования, не могут быть использованы программистом для именования собственных подпрограмм.
Реализация
Для того, чтобы иметь возможность использовать несколько вариантов подпрограммы с одним и тем же именем, но с разным числом аргументов или другими типами аргументов (то есть с разной сигнатурой) и вводится перегрузка подпрограмм. Такая перегрузка возможна в рамках процедурной парадигмы, без применения объектно-ориентированного программирования.
При трансляции происходит контроль одноимённых процедур и функций, чтобы они различались по сигнатуре, так как в этом случае транслятор может однозначно определить вызов нужной подпрограммы.
Чтобы исключить ошибку программиста давшему случайно имя подпрограмме, которое уже используется, вводится дополнительное требование написания ключевого слова. Так сделано, например в языке Delphi (ключевое слово overload).
Правила перегрузки функции
Перегружемая функция должна отличаться либо арность или типом данных. То же самое имя функции используется для различных случаев вызова функции. Это классификация статического полиморфизма, в котором вызов функции будет решен с помощью " лучшего матча техники » , т. е. функция будет решена в зависимости от списка аргументов. Метод перегрузки, как правило, связан с статически-типизированным языком программирования, который соблюдает проверку типа в вызовах функций . При перегрузке метода, вы действительно просто делаете ряд различных методов, которые происходят с одинаковыми именами. Он решается во время компиляции , какой из этих методов. Метод перегрузки не следует путать с формами полиморфизма , где правильный метод выбран во время выполнения, например, посредством виртуальных функций , а не статически. Пример: перегрузки функций в C + +
main() { cout<<volume(10); cout<<volume(2.5,8); cout<<volume(100,75,15); } // volume of a cube int volume(int s) { return(s*s*s); } // volume of a cylinder double volume(double r,int h) { return(3.14*r*r*h); } // volume of a cuboid long volume(long l,int b,int h) { return(l*b*h); }
В приведенном выше примере, объем различных компонентов рассчитывается с использованием тех же вызов функции "volume", с аргументами, различающихся по типу данных или их количество.
Конструктор перегрузки
Конструкторы, используемые для создания экземпляров объектов, также могут быть перегружены в некоторых объектно-ориентированных языках программирования . Потому что во многих языках название конструктора предопределено именем класса, казалось бы, что может быть только один конструктор. Всякий раз, когда несколько конструкторов нужны, они реализованы в виде перегруженных функций. Конструктор по умолчанию не принимает параметров, экземпляр объекта члены с нулевым значением. [ 1 ] Например, конструктор по умолчанию для объекта bill в ресторане написана на C + + может установить Tip до 15%:
Bill() { tip = 15.0; total = 0.0; }
Недостатком является то, что он делает два шага, чтобы изменить значение созданного Bill объекта. Ниже показано создание и изменение значений в рамках основной программы:
Bill cafe; cafe.tip = 10.00; cafe.total = 4.00;
По перегрузке конструктора, можно было бы передать чаевые и общем качестве параметров при создании. Это показывает, перегруженный конструктор с двумя параметрами:
Bill(double setTip, double setTotal) { tip = setTip; total = setTotal; }
Теперь функция, которая создает новый объект Bill может иметь два значения в конструктор и устанавливать элементы данных в один шаг. Ниже показано создание и установка значений:
Bill cafe(10.00, 4.00);
Это может быть полезно в повышении эффективности программ и сокращение длины кода.
Предостережения
Если метод разработан с чрезмерным количеством перегрузок, это может быть трудным для разработчиков, при определении, какие перегрузки в настоящее время используются.
См. также
- Процедурное программирование
- Переопределение метода
- Перегрузка операторов
- Полиморфизм (программирование)
Для улучшения этой статьи желательно?: - Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Проставив сноски, внести более точные указания на источники.
- Добавить иллюстрации.
Категория:- Концепции языков программирования
Wikimedia Foundation. 2010.