Sobes.tech
Junior

Co je to přetížení a přepsání metod v C++?

sobes.tech AI

Odpověď od AI

Přetížení metod (Method Overloading):

  • Umožňuje mít několik metod se stejným názvem ve třídě.
  • Liší se signaturou (počtem a/nebo typem parametrů).
  • Typ návratu neúčastní na definici signatury pro přetížení.
  • Výběr konkrétní metody je určen kompilátorem na základě typů argumentů při volání (statické vázání).
class MyClass {
public:
    void print(int a) {
        // Tisk celého čísla
    }

    void print(double d) {
        // Tisk desetinného čísla
    }

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

Přepsání metod (Method Overriding):

  • Umožňuje odvozené třídě poskytnout specifickou implementaci metody, která je již definována v základní třídě.
  • Metoda v odvozené třídě musí mít stehou signaturu (název, počet a typy parametrů) a stejný typ návratu (nebo kovariantní typ návratu).
  • Používá se s virtuálními funkcemi (virtual) pro realizaci polymorfismu.
  • Výběr konkrétní implementace metody je určen za běhu (dynamické vázání), v závislosti na skutečném typu objektu.
class Base {
public:
    virtual void display() {
        // Implementace v základní třídě
    }
};

class Derived : public Base {
public:
    void display() override { // Klíčové slovo override (od C++11) pomáhá zabránit chybám
        // Specifická implementace v odvozené třídě
    }
};

Hlavní rozdíly:

Charakteristika Přetížení metod Přepsání metod
Místo použití V jedné třídě V základní a odvozené třídě
Název metody Stejný Stejný
Signatura metody Různá Stejná
Mechanismus výběru Statické vázání (kompilace) Dynamické vázání (běh)
Používá se s Normální funkcí Virtuální funkcí
Cíl Různé akce pro různé typy Specifická implementace v dědičnosti