Sobes.tech
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