Junior
Ce sunt suprasarcina și redefinirea metodelor în C++?
sobes.tech AI
Răspuns de la AI
Suprapunerea metodelor (Method Overloading):
- Permite să ai mai multe metode cu același nume într-o clasă.
- Se diferențiază prin semnătură (numărul și/sau tipurile de parametri).
- Tipul de returnare nu participă la definirea semnăturii pentru suprapunere.
- Alegerea unei metode specifice este determinată de compilator pe baza tipurilor de argumente în timpul apelului (legare statică).
class MyClass {
public:
void print(int a) {
// Afișare număr întreg
}
void print(double d) {
// Afișare număr cu virgulă mobilă
}
void print(int a, int b) {
// Afișare două numere întregi
}
};
Suprapunerea metodelor (Method Overriding):
- Permite clasei moștenitoare să ofere o implementare specifică a unei metode deja definite în clasa de bază.
- Metoda din clasa moștenitoare trebuie să aibă aceeași semnătură (nume, număr și tipuri de parametri) și același tip de returnare (sau un tip de returnare covariant).
- Se folosește cu funcții virtuale (
virtual) pentru a realiza polimorfismul. - Alegerea implementării concrete a metodei se determină în timpul execuției (legare dinamică), în funcție de tipul real al obiectului.
class Base {
public:
virtual void display() {
// Implementare în clasa de bază
}
};
class Derived : public Base {
public:
void display() override { // Cuvântul cheie override (începând cu C++11) ajută la evitarea erorilor
// Implementare specifică în clasa derivată
}
};
Principalele diferențe:
| Caracteristică | Suprapunerea metodelor | Suprapunerea (overriding) a metodelor |
|---|---|---|
| Locul de aplicare | În aceeași clasă | În clasele de bază și derivate |
| Numele metodei | Același | Același |
| Semnătura metodei | Diferență | Identică |
| Mecanismul de selecție | Legare statică (compilare) | Legare dinamică (execuție) |
| Se folosește cu | Funcții normale | Funcții virtuale |
| Scopul | Acțiuni diferite pentru tipuri diferite | Implementare specifică în moștenire |