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 |