Junior
Mi az a metódus túlterhelés és felülírás C++-ban?
sobes.tech MI
Válasz az MI-től
Metódus túlterhelés (Method Overloading):
- Lehetővé teszi, hogy ugyanabban a osztályban több módszer is legyen azonos névvel.
- A különbség a szignatúrában van (paraméterek száma és/vagy típusa).
- A visszatérési típus nem vesz részt a túlterhelés szignatúrájának meghatározásában.
- A konkrét módszer kiválasztását a fordító végzi az argumentum típusai alapján a híváskor (statikus kötés).
class MyClass {
public:
void print(int a) {
// Egész szám kiírása
}
void print(double d) {
// Lebegőpontos szám kiírása
}
void print(int a, int b) {
// Két egész szám kiírása
}
};
Metódus felülírás (Method Overriding):
- Lehetővé teszi, hogy az öröklődő osztály egy specifikus implementációt adjon meg egy már a bázisosztályban definiált módszerhez.
- A leszármazott osztályban lévő módszernek ugyanazt a szignatúrát kell követnie (név, paraméterek száma és típusa), és ugyanazt a visszatérési típust (vagy kovariáns típus) kell használnia.
- Virtuális függvények (
virtual) segítségével valósítható meg a polimorfizmus. - A módszer konkrét implementációja futásidőben dől el (dinamikus kötés), az objektum tényleges típusától függően.
class Base {
public:
virtual void display() {
// Alap osztályban való megvalósítás
}
};
class Derived : public Base {
public:
void display() override { // Az override kulcsszó (C++11-től kezdve) segít elkerülni a hibákat
// Specifikus megvalósítás az öröklődő osztályban
}
};
Fő különbségek:
| Jellemző | Metódus túlterhelés | Metódus felülírása |
|---|---|---|
| Alkalmazási hely | Egy osztályon belül | Bázis- és leszármazott osztályokban |
| Metódus neve | Ugyanaz | Ugyanaz |
| Szignatúra | Különböző | Ugyanaz |
| Kiválasztási mechanizmus | Statikus kötés (fordítási időben) | Dinamikus kötés (futási időben) |
| Használatával | Normál függvények | Virtuális függvények |
| Cél | Különböző műveletek különböző típusokra | Specifikus implementáció öröklődésben |