Junior
Šta je preopterećenje i prepisivanje metoda u C++?
sobes.tech АИ
Одговор од АИ
Preopterećenje metoda (Method Overloading):
- Omogućava imati više metoda sa istim imenom u istoj klasi.
- Razlikuju se po potpisu (broju i/ili tipu parametara).
- Tip povratne vrednosti ne učestvuje u definiciji potpisa za preopterećenje.
- Izbor konkretne metode određuje kompajler na osnovu tipova argumenata tokom poziva (statičko povezivanje).
class MyClass {
public:
void print(int a) {
// Štampanje celog broja
}
void print(double d) {
// Štampanje broja sa pokretnom zarezom
}
void print(int a, int b) {
// Štampanje dva cela broja
}
};
Preopterećenje metoda (Method Overriding):
- Omogućava klasi koja nasleđuje da pruži specifičnu implementaciju metode koja je već definisana u osnovnoj klasi.
- Metod u klasi koja nasleđuje mora imati isti potpis (ime, broj i tipove parametara) i isti tip povratne vrednosti (ili kovarijantni tip).
- Koristi se sa virtuelnim funkcijama (
virtual) za implementaciju polimorfizma. - Izbor konkretne implementacije metode određuje se tokom izvršenja (dinamičko povezivanje), u zavisnosti od stvarnog tipa objekta.
class Base {
public:
virtual void display() {
// Implementacija u osnovnoj klasi
}
};
class Derived : public Base {
public:
void display() override { // Ključna reč override (od C++11) pomaže da se izbegnu greške
// Specifična implementacija u izvedenoj klasi
}
};
Glavne razlike:
| Osobina | Preopterećenje metoda | Preopterećenje (overriding) metoda |
|---|---|---|
| Mesto primene | U istoj klasi | U osnovnoj i izvedenoj klasi |
| Ime metode | Isti | Isti |
| Potpis metode | Različit | Isti |
| Mehanizam izbora | Statičko povezivanje (kompajliranje) | Dinamičko povezivanje (izvršenje) |
| Koristi se sa | Obične funkcije | Virtuelne funkcije |
| Cilj | Različite akcije za različite tipove | Specifična implementacija u nasledjivanju |