Sobes.tech
Junior

Čo je to override v C++?

sobes.tech AI

Odpoveď od AI

Prepisovanie (override) je mechanizmus v objektovo orientovanom programovaní, kde odvodená trieda poskytuje svoju vlastnú špecifickú implementáciu virtuálnej funkcie, deklarovanej v základnej triede. Keď sa takáto funkcia volá cez ukazovateľ alebo referenciu na základnú triedu, vykoná sa implementácia z reálneho typu objektu (odvodeného alebo základného), v závislosti od toho, či bola funkcia prepísaná.

Hlavné body:

  • Platí iba pre virtuálne funkcie.
  • Podpis (názov, typ návratovej hodnoty, typy a počet parametrov) funkcie, ktorá sa prepíše v odvodenom type, musí presne zodpovedať podpisu funkcie v základnej triede.
  • Kľúčové slovo override (od C++11) sa používa na explicitné označenie zámeru prepísať funkciu. Kompilátor skontroluje, či funkcia v základnej triede skutočne existuje s takýmto podpisom, a ak nie, vypíše chybu. To pomáha predísť preklepom a robí kód čitateľnejším.

Príklad:

class Base {
public:
    virtual void print() {
        // Implementácia základnej triedy
        // ...
    }

    virtual void display(int x) const {
        // Ďalšia virtuálna funkcia
        // ...
    }
};

class Derived : public Base {
public:
    // Prepisovanie funkcie print z Base
    void print() override {
        // Špecifická implementácia pre Derived
        // ...
    }

    // Toto nie je prepisovanie, lebo chýba const
    /*
    void display(int x) {
        // Chyba kompilácie s override
        // ...
    }
    */

    // Správne prepisovanie funkcie display z Base
    void display(int x) const override {
        // Špecifická implementácia pre Derived
        // ...
    }
};