Sobes.tech
Junior

Kas yra metodų perkrovimas ir perrašymas C++-e?

sobes.tech AI

Atsakymas iš AI

Metodų perkrovimas (Method Overloading):

  • Leidžia turėti kelis metodus su tuo pačiu pavadinimu viename klasėje.
  • Skiriasi pagal signatūrą (parametrų kiekį ir/ar tipus).
  • Grąžinamoji rūšis neįeina į signatūros apibrėžimą perkrovimui.
  • Konkretus metodas pasirenkamas kompiliatoriaus pagal argumentų tipus iškvietimo metu (statinis susiejimas).
class MyClass {
public:
    void print(int a) {
        // Spausdinti sveikąjį skaičių
    }

    void print(double d) {
        // Spausdinti slankųjį skaičių
    }

    void print(int a, int b) {
        // Spausdinti du sveikuosius skaičius
    }
};

Metodų perkrovimas (Method Overloading):

  • Leidžia paveldėti klasei pateikti specifinę metodo realizaciją, kuri jau apibrėžta bazinėje klasėje.
  • Paveldėtoje klasėje metodas turi turėti tą pačią signatūrą (vardą, parametrų skaičių ir tipus) ir tą patį grąžinimo tipą (ar kovariantinį tipą).
  • Naudojama su virtualiomis funkcijomis (virtual) polimorfizmui įgyvendinti.
  • Konkretus realizavimas pasirenkamas vykdymo metu (dinaminis susiejimas), priklausomai nuo objekto tikrojo tipo.
class Base {
public:
    virtual void display() {
        // Bazinės klasės realizacija
    }
};

class Derived : public Base {
public:
    void display() override { // `override` žodis (nuo C++11) padeda išvengti klaidų
        // Konkretus realizavimas paveldėjimo klasėje
    }
};

Pagrindiniai skirtumai:

Savybė Metodų perkrovimas Metodų perrašymas
Taikymo vieta Vienoje klasėje Bazinėje ir paveldėtose klasėse
Metodo pavadinimas Tas pats Tas pats
Signatūra Skirtinga Tas pati
Pasirinkimo mechanizmas Statinis susiejimas (kompiliacija) Dinaminis susiejimas (vykdymas)
Naudojama su Paprastomis funkcijomis Viritualinėmis funkcijomis
Tikslas Skirtingos veiklos skirtingų tipų atžvilgiu Konkretus įgyvendinimas paveldėjimo metu