webForumDet fria alternativet

dynamiska parametrar

5 svar · 886 visningar · startad av noshornin

noshorninMedlem sedan aug. 2008662 inlägg
#1

Jag vet inte ens om det kallas så men det jag undrar är om det är möjligt att skriva en funktion med säg totalt 3 parametrar:

void enFunktion(int a, int b, int c)
{
//blabla
}

Och sen kalla på funktionen och bara ange 2 parametrar:

enFunktion(1,2);

alltså jag vill att parametern c inte ska behöva anges men ska kunna anges.
Någon som vet om det är möjligt och hur man då ska skriva.

tydalMedlem sedan juni 20033 788 inlägg
#2

I C går det inte, men i C++ gör man så här:

void enFunktion(int a, int b, int c = 0)
{
return;
}

Om du sedan anropar enFunktion(1, 2); så kommer c att få värdet 0.

noshorninMedlem sedan aug. 2008662 inlägg
#3

Tackar!

msossnaMedlem sedan feb. 2002279 inlägg
#4

Det finns inget som hindrar att man gör en extrafunktion för att komma runt det hela i C

void enFunktion(int a, int b, int c)
{
   //blabla
}

void enFunktion(int a, int b)
{
   enFunktion(a, b, 0);
}
matlinMedlem sedan okt. 2006228 inlägg
#5

Överlagring av metoder kan man väl göra i alla OO språk, men inte många av dom stödjer "Optional parameters" som rent generellt anses vara "vackrare" kod än överlagring på metoder.

Men visst, det finns inget hinder att överlagra :)

spangoMedlem sedan juni 20006 147 inlägg
#6

Ursäkta O/T, men:

matlin skrev:

Överlagring av metoder kan man väl göra i alla OO språk

Nja, överlagring och OO har inget med varandra att göra, det är nog snarare kopplat till statisk typning (se t.ex. http://corfield.org/entry/Overloading_is_not_OO). Som exempel finns överlagring inte i vare sig Python, Ruby, Objective-C eller Smalltalk (de två sistnämnda har infixnotation av metodnamn vilket gör att man aldrig vill överlagra någonting igen).

123 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
120 ms — hämta tråd, inlägg och bilagor (db)