Перегрузка функций
Перегрузка процедур и функций — возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.
Причина появления
В большинстве ранних языков программирования, чтобы упростить процесс перевода, существовало ограничение, согласно которому в программе одновременно могло быть доступно не более одной процедуры с одинаковым названием, в соответствии с этим ограничением все процедуры, видимые в данной точке программы, должны иметь разные имена
Названия процедур и функций, которые являются частью языка программирования, не могут использоваться программистом для присвоения имён своим собственным подпрограммам.
Реализация
Для того чтобы иметь возможность использовать несколько вариантов подпрограммы с одним и тем же именем, но с разным числом аргументов или другими типами аргументов (то есть с разной сигнатурой, так как список аргументов — часть сигнатуры), вводится перегрузка подпрограмм. Такая перегрузка возможна в рамках процедурной парадигмы, без применения объектно-ориентированного программирования.
При трансляции происходит контроль одноимённых процедур и функций, чтобы они различались по сигнатуре, так как в этом случае транслятор может однозначно определить вызов нужной подпрограммы.
Чтобы исключить ошибку программиста, давшего случайно имя подпрограмме, которое уже используется, вводится дополнительное требование написания ключевого слова. Так сделано, например, в языке 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» с аргументами, различающимися по типу данных или их количеству.
Пример: перегрузки функций на языке Nim.
proc overload(x: int)= echo "string int" proc overload(x: float)= echo "string float" overload(1) # напечатает "string int" overload(1.1) # напечатает "string float" Перегрузка конструктора
Стиль этого раздела неэнциклопедичен или нарушает нормы литературного русского языка. |
Конструкторы, используемые для создания экземпляров объектов, также могут быть перегружены в некоторых объектно-ориентированных языках программирования. Из-за того, что во многих языках название конструктора предопределено именем класса, может показаться, что может существовать только один конструктор. Всякий раз, когда требуются несколько конструкторов, они реализованы в виде перегруженных функций. Конструктор по умолчанию не принимает параметров, экземпляр объекта — члены с нулевым значением. [ 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); Это может быть полезно для повышения эффективности программ и уменьшения размера кода.
Предостережения
Многократная перегрузка процедуры или функции может затруднить разработчикам понимание, какая из перегрузок в какой момент используется.
Ресурсоёмкость
Возможность перегрузки имён процедур и функций в программе определяется возможностями синтаксического анализа компилятора и требованиями стандарта языка их написания. Синтаксический анализ заключается в сопоставлении вызова перегруженной функции с конкретной функцией (с конкретной сигнатурой) и не влияет на ресурсоёмкость программы и время её выполнения.
Размер откомпилированного кода программы при использовании перегрузки функции вместо функции с произвольным количеством аргументов увеличивается (вместо одной процедуры с переменным количеством аргументов компилируется несколько, для конкретного количества), но взамен увеличивается и производительность программы при вызове процедуры, которая описана как перегруженная (не производится анализ типов и других вычислительных операций во время выполнения программы). Так, например, в библиотеке STL языка C++ часто используемые функции с переменным количеством аргументов заменены перегрузками.
См. также
- Процедурное программирование
- Переопределение метода
- Перегрузка операторов
- Полиморфизм (программирование)
- Сопоставление с образцом
- Частичная специализация шаблона
Для улучшения этой статьи желательно: |
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Перегрузка функций, Что такое Перегрузка функций? Что означает Перегрузка функций?
U etogo termina sushestvuyut i drugie znacheniya sm Peregruzka Ne sleduet putat s pereopredeleniem Peregruzka procedur i funkcij vozmozhnost ispolzovaniya odnoimyonnyh podprogramm procedur ili funkcij v yazykah programmirovaniya Prichina poyavleniyaV bolshinstve rannih yazykov programmirovaniya chtoby uprostit process perevoda sushestvovalo ogranichenie soglasno kotoromu v programme odnovremenno moglo byt dostupno ne bolee odnoj procedury s odinakovym nazvaniem v sootvetstvii s etim ogranicheniem vse procedury vidimye v dannoj tochke programmy dolzhny imet raznye imena Nazvaniya procedur i funkcij kotorye yavlyayutsya chastyu yazyka programmirovaniya ne mogut ispolzovatsya programmistom dlya prisvoeniya imyon svoim sobstvennym podprogrammam RealizaciyaDlya togo chtoby imet vozmozhnost ispolzovat neskolko variantov podprogrammy s odnim i tem zhe imenem no s raznym chislom argumentov ili drugimi tipami argumentov to est s raznoj signaturoj tak kak spisok argumentov chast signatury vvoditsya peregruzka podprogramm Takaya peregruzka vozmozhna v ramkah procedurnoj paradigmy bez primeneniya obektno orientirovannogo programmirovaniya Pri translyacii proishodit kontrol odnoimyonnyh procedur i funkcij chtoby oni razlichalis po signature tak kak v etom sluchae translyator mozhet odnoznachno opredelit vyzov nuzhnoj podprogrammy Chtoby isklyuchit oshibku programmista davshego sluchajno imya podprogramme kotoroe uzhe ispolzuetsya vvoditsya dopolnitelnoe trebovanie napisaniya klyuchevogo slova Tak sdelano naprimer v yazyke Delphi klyuchevoe slovo overload Pravila peregruzki funkciiPeregruzhaemye funkcii imeyut odinakovoe imya no raznoe kolichestvo ili tipy argumentov Eto raznovidnost staticheskogo polimorfizma pri kotoroj vopros o tom kakuyu iz funkcij vyzvat reshaetsya po spisku eyo argumentov Etot podhod primenyaetsya v staticheski tipizirovannyh yazykah kotorye proveryayut tipy argumentov pri vyzove funkcii Peregruzhennaya funkciya fakticheski predstavlyaet soboj neskolko raznyh funkcij i vybor podhodyashej proishodit na etape kompilyacii Peregruzku funkcij ne sleduet putat s formami polimorfizma gde pravilnyj metod vybiraetsya vo vremya vypolneniya naprimer posredstvom virtualnyh funkcij a ne staticheski Primer peregruzki funkcij v C main cout lt lt volume 10 cout lt lt volume 2 5 8 cout lt lt 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 V privedennom vyshe primere obem razlichnyh komponentov rasschityvaetsya s ispolzovaniem vyzovov raznyh funkcij volume s argumentami razlichayushimisya po tipu dannyh ili ih kolichestvu Primer peregruzki funkcij na yazyke Nim proc overload x int echo string int proc overload x float echo string float overload 1 napechataet string int overload 1 1 napechataet string float Peregruzka konstruktoraStil etogo razdela neenciklopedichen ili narushaet normy literaturnogo russkogo yazyka Statyu sleduet ispravit soglasno stilisticheskim pravilam Vikipedii 27 fevralya 2016 Konstruktory ispolzuemye dlya sozdaniya ekzemplyarov obektov takzhe mogut byt peregruzheny v nekotoryh obektno orientirovannyh yazykah programmirovaniya Iz za togo chto vo mnogih yazykah nazvanie konstruktora predopredeleno imenem klassa mozhet pokazatsya chto mozhet sushestvovat tolko odin konstruktor Vsyakij raz kogda trebuyutsya neskolko konstruktorov oni realizovany v vide peregruzhennyh funkcij Konstruktor po umolchaniyu ne prinimaet parametrov ekzemplyar obekta chleny s nulevym znacheniem 1 Naprimer konstruktor po umolchaniyu dlya obekta bill v restorane napisana na C mozhet ustanovit Tip do 15 Bill tip 15 0 total 0 0 Nedostatkom yavlyaetsya to chto on delaet dva shaga chtoby izmenit znachenie sozdannogo Bill obekta Nizhe pokazano sozdanie i izmenenie znachenij v ramkah osnovnoj programmy Bill cafe cafe tip 10 00 cafe total 4 00 Cherez peregruzku konstruktora mozhno bylo by peredat chaevye i obshem kachestve parametrov pri sozdanii Primer pokazyvaet peregruzhennyj konstruktor s dvumya parametrami Bill double setTip double setTotal tip setTip total setTotal Teper funkciya kotoraya sozdaet novyj obekt Bill mozhet peredavat dva znacheniya v konstruktor i ustanavlivat elementy dannyh v odin shag Nizhe pokazano sozdanie i ustanovka znachenij Bill cafe 10 00 4 00 Eto mozhet byt polezno dlya povysheniya effektivnosti programm i umensheniya razmera koda PredosterezheniyaMnogokratnaya peregruzka procedury ili funkcii mozhet zatrudnit razrabotchikam ponimanie kakaya iz peregruzok v kakoj moment ispolzuetsya ResursoyomkostVozmozhnost peregruzki imyon procedur i funkcij v programme opredelyaetsya vozmozhnostyami sintaksicheskogo analiza kompilyatora i trebovaniyami standarta yazyka ih napisaniya Sintaksicheskij analiz zaklyuchaetsya v sopostavlenii vyzova peregruzhennoj funkcii s konkretnoj funkciej s konkretnoj signaturoj i ne vliyaet na resursoyomkost programmy i vremya eyo vypolneniya Razmer otkompilirovannogo koda programmy pri ispolzovanii peregruzki funkcii vmesto funkcii s proizvolnym kolichestvom argumentov uvelichivaetsya vmesto odnoj procedury s peremennym kolichestvom argumentov kompiliruetsya neskolko dlya konkretnogo kolichestva no vzamen uvelichivaetsya i proizvoditelnost programmy pri vyzove procedury kotoraya opisana kak peregruzhennaya ne proizvoditsya analiz tipov i drugih vychislitelnyh operacij vo vremya vypolneniya programmy Tak naprimer v biblioteke STL yazyka C chasto ispolzuemye funkcii s peremennym kolichestvom argumentov zameneny peregruzkami Sm takzheProcedurnoe programmirovanie Pereopredelenie metoda Peregruzka operatorov Polimorfizm programmirovanie Sopostavlenie s obrazcom Chastichnaya specializaciya shablonaDlya uluchsheniya etoj stati zhelatelno Najti i oformit v vide snosok ssylki na nezavisimye avtoritetnye istochniki podtverzhdayushie napisannoe Prostavit snoski vnesti bolee tochnye ukazaniya na istochniki Dobavit illyustracii Pozhalujsta posle ispravleniya problemy isklyuchite eyo iz spiska parametrov Posle ustraneniya vseh nedostatkov etot shablon mozhet byt udalyon lyubym uchastnikom
