Перегрузка процедур и функций: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Строка 13:
 
Чтобы исключить ошибку программиста давшему случайно имя подпрограмме, которое уже используется, вводится дополнительное требование написания ключевого слова. Так сделано, например в языке [[Delphi (язык программирования)|Delphi]] (ключевое слово overload).
== Правила перегрузки функции ==
 
Перегруженной функции должны отличаться либо арность или типы данных.
То же самое имя функции используется для различных случаев вызова функции.
Это классификация статический полиморфизм, в котором вызов функции будет решена с помощью " лучший матч техники » , т. е. функция будет решен в зависимости от списка аргументов. Метод перегрузки, как правило, связаны с статически-типизированных языков программирования, которые соблюдения проверки типа в вызовах функций . При перегрузке метода, вы действительно просто сделать ряд различных методов, которые происходят с одинаковыми именами. Она решается на время компиляции , какой из этих методов.
Метод перегрузки не следует путать с формами полиморфизма , где правильный метод выбран во время выполнения, например, посредством виртуальных функций , а не статически.
'''Пример: перегрузки функций в C + +'''
<source lang ="cpp">
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);
}</source>
В приведенном выше примере, объем различных компонентов рассчитывается с использованием тех же вызов функции "volume", с аргументами, различающихся по типу данных или их количество.
== Конструктор перегрузки ==
 
Конструкторы, используемые для создания экземпляров объектов, также могут быть перегружены в некоторых объектно-ориентированных языков программирования . Потому что во многих языках название конструктора предопределено имя класса, казалось бы, что может быть только один конструктор. Всякий раз, когда несколько конструкторов нужны, они реализованы в виде перегруженных функций. Конструктор по умолчанию не принимает параметров, экземпляр объекта члены с нулевым значением. [ 1 ] Например, конструктор по умолчанию для объекта счет в ресторане написана на C + + может установить Tip до 15%:
<source lang ="cpp">
Bill()
{
tip = 15.0;
total = 0.0;
}</source>
Недостатком является то, что он делает два шага, чтобы изменить значение созданного Bill объекта. Ниже показано создание и изменение значений в рамках основной программы:
<source lang ="cpp">
Bill cafe;
cafe.tip = 10.00;
cafe.total = 4.00;
</source>
По перегрузке конструктора, можно было бы передать чаевые и общем качестве параметров при создании. Это показывает, перегруженный конструктор с двумя параметрами:
<source lang ="cpp">
Bill(double setTip, double setTotal)
{
tip = setTip;
total = setTotal;
}</source>
Теперь функция, которая создает новый объект Bill может иметь два значения в конструктор и устанавливать элементы данных в один шаг. Ниже показано создание и установка значений:
<source lang ="cpp">
Bill cafe(10.00, 4.00);
</source>
Это может быть полезно в повышении эффективности программ и сокращение длины кода.
== Предостережения ==
 
Если метод разработан с чрезмерным количеством перегрузок, это может быть трудным для разработчиков, при определении, какие перегрузки в настоящее время используются.
 
== См. также ==