Overbelastningsprocedurer og funktioner

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 16. februar 2017; checks kræver 5 redigeringer .

Overbelastning af procedurer og funktioner  - evnen til at bruge underrutiner af samme navn: procedurer eller funktioner i programmeringssprog.

Årsag til

I de fleste tidlige programmeringssprog var der for at forenkle oversættelsesprocessen en begrænsning, at ikke mere end én procedure med samme navn kunne være tilgængelig i et program på samme tid. Ifølge denne begrænsning skal alle underrutiner, der er synlige på et givet punkt i programmet, have forskellige navne.

Navne og betegnelser for procedurer og funktioner, der er en del af programmeringssproget, kan ikke bruges af programmøren til at navngive sine egne underrutiner.

Implementering

For at kunne bruge flere varianter af en underrutine med samme navn, men med et andet antal argumenter eller andre typer argumenter (det vil sige med en anden signatur , da argumentlisten er en del af signaturen), skal subrutine overbelastning indføres. En sådan overbelastning er mulig inden for det proceduremæssige paradigme uden brug af objektorienteret programmering.

Under oversættelse styres procedurer og funktioner af samme navn, så de adskiller sig i signatur, da oversætteren i dette tilfælde entydigt kan bestemme opkaldet til den ønskede subrutine.

For at eliminere fejlen fra en programmør, der ved et uheld gav et navn til en underrutine, der allerede er i brug, introduceres et yderligere krav om at skrive et nøgleord. Dette gøres for eksempel i Delphi -sproget (overload nøgleordet).

Funktion overbelastningsregler

Overbelastede funktioner har samme navn, men forskellige tal eller typer af argumenter. Dette er en slags statisk polymorfi , hvor spørgsmålet om, hvilken funktion der skal kaldes, afgøres af listen over dens argumenter. Denne tilgang bruges i statisk indtastede sprog, som kontrollerer argumenttyperne, når en funktion kaldes. En overbelastet funktion er faktisk flere forskellige funktioner, og valget af den passende sker på kompileringstidspunktet. Funktionsoverbelastning bør ikke forveksles med former for polymorfi, hvor den korrekte metode vælges under kørsel, såsom gennem virtuelle funktioner, snarere end statisk.

Eksempel: Funktionsoverbelastning i C++

vigtigste () { cout << volumen ( 10 ); cout << volumen ( 2,5 , 8 ); cout << volumen ( 100 , 75 , 15 ); } // volumen af ​​en terning int volumen ( int s ) { returnere ( s * s * s ); } // volumen af ​​en cylinder dobbelt volumen ( dobbelt r , int h ) { retur ( 3,14 * r * r * h ); } // rumfang af et kubisk langt rumfang ( lang l , int b , int h ) { returnere ( l * b * h ); }

I eksemplet ovenfor beregnes volumen af ​​de forskellige komponenter ved hjælp af kald til forskellige "volumen"-funktioner med argumenter, der er forskellige i datatype eller mængde.

Eksempel: funktionsoverbelastning i Nim-sproget.

proc overbelastning ( x : int ) = ekko "streng int" proc overbelastning ( x : float ) = ekko "strengfloat" overload ( 1 ) # vil udskrive "string int" overload ( 1.1 ) # vil udskrive "string float"

Konstruktør overbelastning

Konstruktører, der bruges til at instansiere objekter, kan også blive overbelastet i nogle objektorienterede programmeringssprog. Fordi på mange sprog navnet på konstruktøren er foruddefineret af navnet på klassen, ser det ud til, at der kun kan være én konstruktør. Når der kræves flere konstruktører, implementeres de som overbelastede funktioner. Standardkonstruktøren tager ingen parametre, objektforekomsten tager null-medlemmer. [ 1 ] For eksempel kan standardkonstruktøren for et regningsobjekt i en restaurant skrevet i C++ indstille Tip til 15 %:

regning () { tip = 15,0 ; total = 0,0 ; }

Ulempen er, at det tager to trin at ændre værdien af ​​det oprettede Bill-objekt. Følgende viser oprettelsen og ændringen af ​​værdier i hovedprogrammet:

Bill cafe ; cafe . tip = 10,00 ; cafe . i alt = 4,00 ;

Gennem konstruktøroverbelastning ville det være muligt at videregive et tip og den generelle kvalitet af parametre under oprettelsen. Eksemplet viser en overbelastet konstruktør med to parametre:

Regning ( dobbelt sætTip , dobbelt sætTotal ) { tip = sæt Tip ; total = setTotal ; }

Nu kan funktionen, der opretter det nye Bill-objekt, videregive to værdier til konstruktøren og indstille datamedlemmerne i ét trin. Følgende viser, hvordan du opretter og indstiller værdier:

Bill cafe ( 10.00 , 4.00 );

Dette kan være nyttigt til at gøre programmer mere effektive og reducere kodestørrelsen.

Advarsler

Overbelastning af en procedure eller funktion flere gange kan gøre det svært for udviklere at vide, hvilken overbelastning der bruges på hvilket tidspunkt.

Ressourceintensitet

Muligheden for at overbelaste navnene på procedurer og funktioner i programmet bestemmes af compilerens parsing-funktioner og kravene til sprogets standard til at skrive dem. Syntaktisk analyse består i at matche kaldet af en overbelastet funktion med en specifik funktion (med en specifik signatur) og påvirker ikke ressourceforbruget af programmet og dets eksekveringstid.

Størrelsen af ​​den kompilerede programkode ved brug af en funktionsoverbelastning i stedet for en funktion med et vilkårligt antal argumenter øges (i stedet for én procedure med et variabelt antal argumenter kompileres flere for et bestemt antal), men i stedet for programmets ydeevne stiger, når der kaldes en procedure, der beskrives som overbelastet (der udføres ingen typeanalyse og andre beregningsoperationer under programafvikling). Så for eksempel i C++ STL-biblioteket erstattes ofte brugte funktioner med et variabelt antal argumenter af overbelastninger.

Se også