Standardargument

I programmering är standardargumentet ett funktionsargument som är valfritt när det anropas. I de flesta programmeringsspråk kan funktioner ta ett eller flera argument. Som regel måste alla argument anges i sin helhet (som i programmeringsspråket C [1] ). Senare tillät vissa språk (till exempel C++ ) programmeraren att ange värdena för vissa argument i funktionsdeklarationen. Således kan funktionen anropas genom att endast skicka de nödvändiga argumenten.

Standardargument i C++

Tänk på följande funktionsdeklaration:

int my_func ( int a , int b , int c = 12 );

Den här funktionen tar tre argument, varav det sista har ett standardvärde på 12. Programmeraren kan anropa den här funktionen på två sätt:

resultat = my_func ( 1 , 2 , 3 ); resultat = my_func ( 1 , 2 );

I det första fallet bestäms värdet på argumentet c i funktionsanropet och är lika med tre. I det andra fallet utelämnas det sista argumentet och c sätts till tolv .

Standardargumenten ställs in med början från det sista argumentet.

Standardargumentvärdena för virtuella metoder bestäms inte vid körning av typen av objekt, utan tas från typen av pekare. I det här exemplet kommer konsolskärmen att visa 1 Derived:

klass Bas { public : virtual void foo ( int x = 1 ) { std :: cout << x << "Bas" ; } }; klass Härledd : offentlig bas { public : void foo ( int x = 2 ) åsidosätta { std :: cout << x << "Härledd" ; } }; int main () { Bas * x = ny härledd ; x -> foo (); // "1 härledd" returnerar 0 ; }

För medlemsfunktioner kan standardvärden för argument anges i definitionerna. Sådana funktioner kan endast anropas med standardvärden om deras definition sker före anropet. Exempel:

struktur C { void g ( int i , int j = 99 ); C ( int a ); }; C :: C ( int = 5 ) { } void C :: g ( int i = 88 , int j ) { }

Överbelastade metoder

Vissa andra språk, som Java , stöder inte standardargument. Detta beteende kan dock reproduceras genom att använda en metodöverbelastning med samma namn och färre argument:

int MyFunc ( int a , int b ) { return MyFunc ( a , b , 12 ); } int MyFunc ( int a , int b , int c ) { /* huvudimplementering */ }

Betyg

För varje funktionsanrop måste standardargumentvärden skickas till den anropade funktionen. Detta leder till repetitivitet i koden. Standardargumenten tas bort för att undvika detta.

Om standardargumentet inte bara är ett bokstavligt utan ett uttryck, kan detta uttryck utvärderas en gång för hela programmet.

Python är anmärkningsvärt för det faktum att det utvärderar uttryck i standardargument endast en gång, under modulladdning. Om du vill utvärdera ett värde i varje funktionsanrop kan du tilldela ett signalvärde till argumentet, (till exempel Nonei Python) och sedan i den första raden i funktionen, kontrollera det.

Till exempel kan standardargument i Python implementeras så här:

import datetime def f ( a , b = Ingen ): b = b eller datetime . datetime . nu ()

Länkar

  1. Standardparametrar . Datum för åtkomst: 13 januari 2012. Arkiverad från originalet den 9 oktober 2011.