Sobes.tech
Junior

Kas ir override C++-ā?

sobes.tech AI

Atbilde no AI

Pārklāšana (override) ir objektorientētās programmēšanas mehānisms, kurā atvasinātā klase nodrošina savu specifisko vērstās funkcijas realizāciju, kas ir deklarēta bāzes klasē. Kad šāda funkcija tiek izsaukta caur rādītāju vai atsauci uz bāzes klasi, tiks izpildīta faktiskā objekta tipa (atvasinātā vai bāzes) realizācija, atkarībā no tā, vai funkcija ir pārklāta.

Galvenie punkti:

  • Tiek piemērots tikai vērstajām funkcijām.
  • Pārklājošās funkcijas signatūra (nosaukums, atgriešanas tips, parametru tipi un skaits) atvasinātajā klasē ir jāatbilst pārklātās funkcijas signatūrai bāzes klasē.
  • Atslēgvārds override (sākot ar C++11) tiek izmantots, lai skaidri norādītu nodomu pārklāt funkciju. Kompilators pārbaudīs, vai bāzes klases funkcija patiešām pastāv ar šādu signatūru, un, ja nē, izmetīs kļūdu. Tas palīdz izvairīties no drukas kļūdām un padara kodu lasāmāku.

Piemērs:

class Base {
public:
    virtual void print() {
        // Bāzes klases realizācija
        // ...
    }

    virtual void display(int x) const {
        // Vēl viena virtuāla funkcija
        // ...
    }
};

class Derived : public Base {
public:
    // Pārklāšana no Base
    void print() override {
        // Specifiska realizācija Derived
        // ...
    }

    // Tas nav pārklājums, jo trūkst const
    /*
    void display(int x) {
        // Kļūda ar override
        // ...
    }
    */

    // Pareiza display funkcijas pārklāšana no Base
    void display(int x) const override {
        // Specifiska realizācija Derived
        // ...
    }
};