next up previous contents
Elõre: C ++ kommentek Fel: Új elemek a C++-ban Vissza: Cím szerint nyilvántartott típusú

Inicializált függvényparaméterek

Változók esetében már a hagyományos C-ben megszoktuk, hogy a definíció során kezdeti értékeket is megadhatunk. A C++ filozófia a kezdeti értékadást kiemelt fontossággal kezeli (lásd például a konstruktorokat 2.7-nél), így szinte természetes, hogy ezt a lehetõséget a függvényparaméterekre is kiterjeszti.

A C nyelv (és a C++ is) megengedi, hogy egy függvényt kevesebb aktuális paraméterrel aktivizáljunk, mint ahány paramétert a formális paraméterlistában deklaráltunk. Ez sokszor kellemes, jól kihasználható tulajdonság, sokszor azonban kellemetlen, nehezen észrevehetõ mellékhatásokat eredményezõ hibaforrás is lehet. Gondoljunk csak a jól ismert printf függvényre, melynek mûködése a C ezen tulajdonságán alapul: Ha a formátum-specifikáló sztringben több kiirandó adatot határozunk meg, mint ahányat aztán ténylegesen felsorolunk a printf aktuális paraméterlistájában, akkor mindig valami "szemét" kerül standard outputra. Ehhez hasonlóan határozatlan paraméterértékekkel dolgozhat akármilyen más függvény is, ha véletlenül hiányos aktuális paraméterlistával hívtuk meg. Az ilyen - esetleg fatális hibát okozó - szituációk elkerülését szolgálja az a lehetõség, hogy egy függvény deklarációjakor a formális paraméterlistán az egyes paraméterekhez alapértelmezés-szerû (default) kezdeti értékeket rendelhetünk. Tekintsünk erre egy példát:

    double triangle(double a=0, double b=0, double gamma=90);
Ha a fenti deklaráció szerinti függvényt arra használjuk, hogy egy háromszög harmadik oldalának hosszát kiszámítsuk a koszinusz-tétel segítségével (úgy, hogy a két ismert oldal által közbezárt szöget fokokban kell megadnunk), akkor a gamma paraméter kihagyásával a Pithagorasz-tételre egyszerûsödhet a probléma. Tehát a triangle(3,4,135) függvényhíváskor az aktuális paraméterek értéke rendre 3, 4 és 135, a triangle(3,4) híváskor 3, 4 és 90, triangle(3) hatására 3, 0, 90 lesz, és végül a triangle() függvényhívás esetében teljesen az alapértelmezés szerinti 0, 0, 90 számhármas lesz érvényben.