Sobes.tech
Junior

Čo je to preťažovanie a prepisovanie metód v C++?

sobes.tech AI

Odpoveď od AI

Preťaženie metód (Method Overloading):

  • Umožňuje mať niekoľko metód s tým istým menom v jednom triede.
  • Odlišujú sa podľa signatúry (počtu a/alebo typov parametrov).
  • Typ návratu nezohráva úlohu pri definovaní signatúry pre preťaženie.
  • Konkrétna metóda je vybraná kompilátorom na základe typov argumentov pri volaní (statické viazanie).
class MyClass {
public:
    void print(int a) {
        // Tlač celého čísla
    }

    void print(double d) {
        // Tlač čísla s pohyblivou čiarkou
    }

    void print(int a, int b) {
        // Tlač dvoch celých čísel
    }
};

Preťaženie metód (Method Overloading):

  • Umožňuje triede dediť poskytnúť špecifickú implementáciu metódy, ktorá je už definovaná v základnej triede.
  • Metóda v odvodenej triede musí mať rovnakú signatúru (meno, počet a typy parametrov) a rovnaký typ návratu (alebo kovariantný typ návratu).
  • Používa sa s virtuálnymi funkciami (virtual) na implementáciu polymorfizmu.
  • Výber konkrétnej implementácie metódy je určený počas behu (dynamické viazanie), v závislosti od skutočného typu objektu.
class Base {
public:
    virtual void display() {
        // Implementácia v základnej triede
    }
};

class Derived : public Base {
public:
    void display() override { // Kľúčové slovo override (od C++11) pomáha predísť chybám
        // Špecifická implementácia v odvodenej triede
    }
};

Hlavné rozdiely:

Charakteristika Preťaženie metód Prepisovanie metód
Miesto použitia V jednej triede V základnej a odvodených triedach
Meno metódy Rovnaké Rovnaké
Signatúra metódy Odlišná Rovnaká
Mechanizmus výberu Statické viazanie (kompilácia) Dynamické viazanie (behom)
Používa sa s Bežnými funkciami Virtuálnymi funkciami
Cieľ Rôzne akcie pre rôzne typy Špecifická implementácia v dedičovi