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 |