Sobes.tech
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