C++ function overloading
| polymorphism |
|---|
| ad hoc polymorphism |
| parametric polymorphism |
| subtyping |
Főnév
C++ function overloading (tsz. C++ function overloadings)
- (informatika) Függvény túlterhelés (function overloading) C++-ban
A C++-ban a függvény túlterhelés (angolul: function overloading) egy olyan mechanizmus, amely lehetővé teszi, hogy több függvény ugyanazzal a névvel létezzen egy adott programban, amennyiben a paraméterek típusa vagy azok száma eltér. A C++-ban a függvények nevei ugyanazok lehetnek, de a paraméterek típusa, száma vagy azok sorrendje különbözhet. A fordító a paraméterek alapján választja ki, hogy melyik függvényt hívja meg.
Miért fontos a függvény túlterhelés?
A függvény túlterhelés lehetősége nagyban segíti a kód olvashatóságát és egyszerűsíti a programozást. Azért is hasznos, mert nem kell különböző neveket adni a hasonló működésű függvényeknek. Így elkerülhetjük a redundanciát, és egyértelműbbé tehetjük a kódot.
A függvény túlterhelés alapjai
A függvények túlterhelése akkor válik elérhetővé, ha:
- A függvények paraméterei eltérnek: Ez lehet a paraméterek száma vagy azok típusa. A visszatérési típus nem játszik szerepet a függvény túlterhelésében, mivel a fordító nem képes a visszatérési típus alapján meghatározni, melyik függvényt kell használni.
- A függvények ugyanazt a nevet használják: A függvények név szerinti azonosítása történik, a paraméterek típusától vagy számától függően.
Példa a függvény túlterhelésre
A következő példában bemutatok egy egyszerű alkalmazást, amely a túlterhelést mutatja be. Van egy add nevű függvény, amely különböző típusú paraméterekkel van túlterhelve.
#include <iostream>
using namespace std;
// Két egész szám összeadása
int add(int a, int b) {
return a + b;
}
// Két lebegőpontos szám összeadása
float add(float a, float b) {
return a + b;
}
// Három egész szám összeadása
int add(int a, int b, int c) {
return a + b + c;
}
int main() {
int intResult = add(5, 10); // Két egész szám
float floatResult = add(5.5f, 10.5f); // Két lebegőpontos szám
int intResult3 = add(1, 2, 3); // Három egész szám
cout << "Két egész szám összege: " << intResult << endl;
cout << "Két lebegőpontos szám összege: " << floatResult << endl;
cout << "Három egész szám összege: " << intResult3 << endl;
return 0;
}
Magyarázat
Ebben a példában három különböző add függvényt definiáltunk:
- Az első függvény két
inttípusú paramétert vár. - A második függvény két
floattípusú paramétert vár. - A harmadik függvény három
inttípusú paramétert vár.
Amikor a main függvényben meghívjuk az add függvényt, a fordító automatikusan kiválasztja a megfelelő függvényt a paraméterek típusai és száma alapján.
A függvények túlterhelésének szabályai
- Paraméterek típusa: A függvények túlterhelésénél fontos, hogy a paraméterek típusai eltérjenek. Azonos típusú paraméterek használata nem eredményez túlterhelést, mert a fordító nem tudna különbséget tenni a két függvény között.
- Paraméterek száma: Ha két függvény ugyanazokkal a típusú paraméterekkel rendelkezik, de különböző számú paramétert várnak, akkor a fordító képes lesz kiválasztani a helyes függvényt.
- A visszatérési típus nem játszik szerepet: A függvények visszatérési típusa nem szerepel a túlterhelési mechanizmusban. Ez azt jelenti, hogy nem lehet ugyanazzal a névvel rendelkező függvényeket létrehozni, ha csak a visszatérési típusban különböznek, de a paraméterek ugyanazok.
Túlterhelés és típuskonverzió
A C++-ban előfordulhat, hogy egy függvényt túlterheltünk, és a paraméterek típusait automatikusan konvertálni kell a megfelelő típusra, hogy a függvényt meghívhassuk. Ezt implicit konverziónak nevezik.
Például:
#include <iostream>
using namespace std;
void print(int x) {
cout << "Egész szám: " << x << endl;
}
void print(double x) {
cout << "Lebegőpontos szám: " << x << endl;
}
int main() {
print(10); // hívja az int verziót
print(10.5); // hívja a double verziót
return 0;
}
Ebben a példában, amikor print(10)-et hívunk, az int verzió kerül meghívásra, míg print(10.5) esetén a double verzió.
Korlátok és problémák
A túlterhelésnél figyelembe kell venni néhány potenciális problémát is:
Ambiguity (Homályosság): Ha két túlterhelt függvény paraméterei között nincs elég különbség, akkor a fordító nem lesz képes egyértelműen meghatározni, hogy melyik függvényt hívja meg. Ilyen helyzetekben a fordító hibát jelez.
Példa: ```cpp void foo(int x) { cout << “int paraméter:” << x << endl; }
void foo(double x) { cout << “double paraméter:” << x << endl; }
int main() { foo(10); // Itt ambiguus a hívás return 0; } ``
Ebben az esetben, mivel azinttípus és adouble` típus között nincs világos konverzió, a fordító nem tudja eldönteni, hogy melyik függvényt hívja meg.Túlterhelés és típusok összehasonlítása: Ha a paraméterek típusai közel állnak egymáshoz (például
intésfloat), akkor a fordító döntése meglehetősen összetett lehet. Az implicit típuskonverziók és a túlterhelt függvények közötti választás néha nem olyan nyilvánvaló, mint azt a programozó várná.
Összefoglalás
A függvény túlterhelés egy rendkívül hasznos eszköz C++-ban, amely lehetővé teszi ugyanazon név alatt több függvény létrehozását, ha azok paraméterei eltérnek. A túlterhelés segíthet a kód tisztán tartásában és csökkentheti a redundanciát. Fontos azonban ügyelni arra, hogy a paraméterek között elegendő különbség legyen, hogy a fordító egyértelműen ki tudja választani a megfelelő függvényt.
- C++ function overloading - Szótár.net (en-hu)
- C++ function overloading - Sztaki (en-hu)
- C++ function overloading - Merriam–Webster
- C++ function overloading - Cambridge
- C++ function overloading - WordNet
- C++ function overloading - Яндекс (en-ru)
- C++ function overloading - Google (en-hu)
- C++ function overloading - Wikidata
- C++ function overloading - Wikipédia (angol)