Перегрузка процедур и функций

Полиморфизм
Специальный полиморфизм
Параметрический полиморфизм
Полиморфизм подтипов

Перегрузка процедур и функций — возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.

Причина появления

В большинстве ранних языков программирования, чтобы упростить процесс перевода, существовало ограничение, согласно которому в программе одновременно могло быть доступно не более одной процедуры с одинаковым названием, в соответствии с этим ограничением все процедуры, видимые в данной точке программы, должны иметь разные имена

Названия процедур и функций, которые являются частью языка программирования, не могут использоваться программистом для присвоения имён своим собственным подпрограммам.

Реализация

Для того чтобы иметь возможность использовать несколько вариантов подпрограммы с одним и тем же именем, но с разным числом аргументов или другими типами аргументов (то есть с разной сигнатурой, так как список аргументов — часть сигнатуры), вводится перегрузка подпрограмм. Такая перегрузка возможна в рамках процедурной парадигмы, без применения объектно-ориентированного программирования.

При трансляции происходит контроль одноимённых процедур и функций, чтобы они различались по сигнатуре, так как в этом случае транслятор может однозначно определить вызов нужной подпрограммы.

Чтобы исключить ошибку программиста, давшего случайно имя подпрограмме, которое уже используется, вводится дополнительное требование написания ключевого слова. Так сделано, например, в языке 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++ часто используемые функции с переменным количеством аргументов заменены перегрузками.

См. также

Read other articles:

Kitchen tool Not to be confused with peeler. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Peel tool – news · newspapers · books · scholar · JSTOR (November 2009) (Learn how and when to remove this template message) A peel is a tool used by bakers to slide loaves of bread, pizzas, pastries, and other ...

 

Benedict CumberbatchCBECumberbatch di San Diego Comic-Con 2019LahirBenedict Timothy Carlton Cumberbatch19 Juli 1976 (umur 47)Hammersmith, London, InggrisKebangsaanBritaniaAlmamater Universitas Manchester Akademi Musik dan Seni Drama London PekerjaanAktorTahun aktif1998–sekarangKaryaDaftar lengkapSuami/istriSophie Hunter ​(m. invalid year)​Anak3Orang tuaTimothy Carlton (bapak)Wanda Ventham (ibu)PenghargaanDaftar lengkap Cumberbatch's voice dari program ...

 

Halaman ini mencakup daftar kota di Polandia. Sebuah kamus ilmu bumi Diarsipkan 2006-06-14 di Wayback Machine. tersedia untuk mencari setiap kota. Peta Polandia Polandia Artikel ini adalah bagian dari seri Politik dan KetatanegaraanPolandia Pemerintahan Undang-Undang Dasar Polandia Hukum Hak asasi manusia Legislatif Parlemen Polandia parlemen saat ini Sejm Ketua Elżbieta Witek (PiS) Wakil Ketua Senat Ketua Tomasz Grodzki (PO) Wakil Ketua Eksekutif Presiden Polandia Andrzej Duda (I) Perdana M...

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada.Este aviso fue puesto el 17 de noviembre de 2021. Para otros usos de este término, véase Hospital Italiano. Hospital Italiano Sociedad Italiana de Beneficencia Sede Central: Perón 4190, CABA. LocalizaciónPaís  ArgentinaLocalidad CABA, ArgentinaCoordenadas 34°36′24″S 58°25′30″O / -34.6065833, -58.425Datos generalesFundación 1872Financiamiento Organización sin fines ...

 

هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (نوفمبر 2021) راديو.كوم   الموقع الإلكتروني الموقع الرسمي  تعديل مصدري - تعديل   راديو

 

Radian per detikFrekuensi sudut ω (dalam radian per detik), lebih besar dari frekuensi ν (dalam putaran per detik, juga disebut Hz), dengan faktor 2π, karena 2π rad/s sama dengan 1 Hz.Informasi umumSistem satuanSatuan turunan SIBesarankecepatan sudutSimbolrad⋅s−1 Radian per detik (simbol: rad·s−1 atau rad/s) adalah satuan SI untuk kecepatan sudut. Ia juga menjadi satuan untuk frekuensi sudut. Radian per detik didefinisikan sebagai perubahan orientasi suatu benda, di dalam radian, t...

UNESCO World Heritage Site in Jiangsu, China The Garden of CultivationUNESCO World Heritage SiteMing Dynasty PavilionLocationSuzhou, Jiangsu, ChinaPart ofClassical Gardens of SuzhouCriteriaCultural: (i)(ii)(iii)(iv)(v)Reference813bis-007Inscription1997 (21st Session)Extensions2000Area0.38 ha (0.94 acres)Buffer zone1.117 ha (2.76 acres)Coordinates31°18′54.9″N 120°36′17.0″E / 31.315250°N 120.604722°E / 31.315250; 120.604722Location of Gard...

 

Joachim Schöberl (* 27. Februar 1940; † 30. April 2016) war ein deutscher Germanist. Leben Grabstätte auf dem Waldfriedhof Winsen (Luhe) Nach der Promotion 1972 Die Metaphorik in der galanten Lyrik der Neukirchschen Sammlung. Ein Beitrag zur Charakteristik des spätbarocken Stils an der Universität Hamburg lehrte er von 1982 bis 2005 als Professor für Neuere deutsche Literatur in Hamburg und war ab 1993 Leiter des Instituts für Theater, Musiktheater und Film. Seine Forschungsschwerpunk...

 

Tom KalinTom Kalin at the premiere of Savage Grace at the 2008 Tribeca Film Festival.Born (1962-03-04) March 4, 1962 (age 61)Chicago, Illinois, U.S.Alma materUniversity of IllinoisArt Institute of ChicagoOccupation(s)Director, screenwriter, producerYears active1989–presentAwardsBerlin International Film Festival (1992), Gotham Awards (1992), New York Lesbian and Gay Film Festival (2002) Tom Kalin (born 1962) is a screenwriter, film director, producer, and professor of experim...

This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) The topic of this article may not meet Wikipedia's notability guideline for music. Please help to demonstrate the notability of the topic by citing reliable secondary sources that are independent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to be merge...

 

Gold mine in Western Australia Mount IdaLocationMount Ida Gold MineLocation in Western AustraliaLocationMenziesStateWestern AustraliaCountryAustraliaCoordinates29°05′54″S 120°27′46″E / 29.09833°S 120.46278°E / -29.09833; 120.46278ProductionProductsGoldProduction0 (in care and maintenance)Financial year2020–21HistoryOpened2007Closed2008OwnerCompanyRed Dirt MetalsWebsitereddirtmetals.com.auYear of acquisition2021 The Mount Ida Gold Mine is a gold mine locat...

 

Theme park in Guangdong Province, China Lionsgate Entertainment WorldLocationHengqin, Zhuhai, Guangdong, ChinaStatusOperatingOpened31 July 2019; 4 years ago (2019-07-31)[1]OwnerLionsgateThemeLionsgate charactersWebsiteOfficial website Lionsgate Entertainment World, officially abbreviated to LEW, is a theme park found on Hengqin Island, Guangdong Province, China.[2] The park opened on July 31, 2019 as the first Lionsgate Theme Park. Designed by the Thinkwell G...

Australian cricketer Maisy GibsonGibson bowling for Hobart Hurricanes, 2019Personal informationFull nameMaisy Leigh GibsonBorn (1996-09-14) 14 September 1996 (age 27)Singleton, New South Wales, AustraliaBattingLeft-handedBowlingRight arm leg breakRoleAll-rounderDomestic team information YearsTeam2015/16–2018/19New South Wales2015/16–2018/19Sydney Thunder2016Nottinghamshire2019/20–2022/23Tasmania2019/20–presentHobart Hurricanes Career statistics Competition WLA WT20 Matches 2...

 

The 16th-century Skálholt Map of Norse America One of Grimspound's hut circles Historical climatology is the study of historical changes in climate and their effect on civilization from the emergence of homininis to the present day. This differs from paleoclimatology which encompasses climate change over the entire history of Earth. These historical impacts of climate change can improve human life and cause societies to flourish, or can be instrumental in civilization's societal collapse. Th...

 

Medical condition in which spinal cartilage bulges outward under pressure but remains intact This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Disc protrusion – news · newspapers · books · scholar · JSTOR (February 2017) (Learn how and when to remove this template message) Spinal disc protrusion visible in MRI...

Ethnic enclave in California, U.S. For Koreatowns in general, see Koreatown. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Koreatown, Garden Grove – news · newspapers · books · scholar · JSTOR (December 2015) (Learn how and when to remove this template message) Koreatown (also referred to as Little Seoul a...

 

Vietnamese-American actress (1973–2001) This article is about the actress. For the musical artist, see Trish Thuy Trang. Thuy TrangTrang in 2000Born(1973-12-14)December 14, 1973Saigon, South Vietnam(present day Ho Chi Minh City, Vietnam)DiedSeptember 3, 2001(2001-09-03) (aged 27)Bakersfield, California, U.S.Resting placeRose Hills Memorial Park, Whittier, CaliforniaOccupationActressYears active1981–2001 Thuy Trang (December 14, 1973 – September 3, 2001) was a Vietnamese-Am...

 

Two peerages of Scotland Earldom of Wigtown Quarterly: 1st and 4th, gules, a chevron within a double tressure counterflory argent (Fleming); 2nd and 3rd, Azure, three cinquefoils argent (Fraser)Creation date9 November 1341Created byDavid II of ScotlandPeeragePeerage of ScotlandFirst holderMalcolm Fleming, 1st Earl of WigtownSubsidiary titlesBaron Galloway Lord of Cumbernauld Lord of KirkintillochLord FlemingSeat(s)Tottenham HouseMottoLet the deed shaw[1] The title of Earl of Wigtown (...

Liborina Municipio Casa esquinera en Liborina Bandera LiborinaLocalización de Liborina en Colombia LiborinaLocalización de Liborina en Antioquia Coordenadas 6°40′41″N 75°48′44″O / 6.6780555555556, -75.812222222222Entidad Municipio • País  Colombia • Departamento Antioquia • Subregión OccidenteAlcaldesa Adriana Maria Maya Gallego (2020-2023)Eventos históricos   • Fundación 7 de marzo de 1832[1]​ • Erección 11 d...

 

French actress Christa ThéretThéret in 2016Born (1991-06-25) 25 June 1991 (age 32)Paris, FranceNationalityFrenchOccupationActorYears active2005–present Christa Théret (born 25 June 1991) is a French actor, best known for their roles as Lola in LOL (Laughing Out Loud) and as Andrée Heuschling in Renoir.[1][2] Early life As a child, Théret aspired to be a teacher and then to become an actor.[3] Career Théret's acting career began at the age of 11; while...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!