Sobes.tech
Junior

Kas yra override C++-e?

sobes.tech AI

Atsakymas iš AI

Perrašymas (override) – tai objektinio programavimo mechanizmas, kai paveldėtas klasė teikia savo specifinę virtualios funkcijos įgyvendinimą, paskelbtą bazinėje klasėje. Kai tokia funkcija kviečiama per rodyklę ar nuorodą į bazinę klasę, bus vykdoma faktinio objekto tipo (paveldėto ar bazinio) įgyvendinimas, priklausomai nuo to, ar funkcija buvo perrašyta.

Pagrindiniai punktai:

  • Taikoma tik virtualioms funkcijoms.
  • Perrašančios funkcijos signatūra (pavadinimas, grąžinamo tipo, parametrai) paveldėtoje klasėje turi tiksliai atitikti perrašomos funkcijos signatūrą bazinėje klasėje.
  • Raktažodis override (nuo C++11) naudojamas aiškiai nurodyti ketinimą perrašyti funkciją. Kompiliatorius patikrins, ar bazinės klasės funkcija tikrai egzistuoja su tokia signatūra, ir jei ne, išmes klaidą. Tai padeda išvengti rašybos klaidų ir daro kodą aiškesnį.

Pavyzdys:

class Base {
public:
    virtual void print() {
        // Bazinės klasės įgyvendinimas
        // ...
    }

    virtual void display(int x) const {
        // Dar viena virtuali funkcija
        // ...
    }
};

class Derived : public Base {
public:
    // Perrašymas iš Base
    void print() override {
        // Specifinė įgyvendinimas Derived
        // ...
    }

    // Tai nėra perrašymas, nes trūksta const
    /*
    void display(int x) {
        // Klaidų kompiliatoriuje su override
        // ...
    }
    */

    // Teisingas display funkcijos perrašymas iš Base
    void display(int x) const override {
        // Specifinė įgyvendinimas Derived
        // ...
    }
};