Sobes.tech
Junior

Какво е override в C++?

sobes.tech AI

Отговор от AI

Презаписването (override) е механизъм в обектно-ориентираното програмиране, при който наследеният клас предоставя своя собствена специфична реализация на виртуална функция, обявена в базовия клас. Когато такава функция се извика чрез указател или препратка към базовия клас, ще бъде изпълнена реализацията от реалния тип на обекта (наследен или базов), в зависимост от това дали функцията е била презаписана.

Основни моменти:

  • Приложим само към виртуални функции.
  • Подписът (име, тип на връщане, типове и брой параметри) на презаписващата функция в наследения клас трябва точно да съвпада с подписа на презаписваната функция в базовия клас.
  • Ключовата дума override (от C++11 нататък) се използва за ясно указване на намерението за презаписване на функция. Компилаторът ще провери дали функцията в базовия клас действително съществува с този подпис и ще даде грешка, ако не. Това помага да се избегнат печатни грешки и прави кода по-лесен за четене.

Пример:

class Base {
public:
    virtual void print() {
        // Реализация на базовия клас
        // ...
    }

    virtual void display(int x) const {
        // Още една виртуална функция
        // ...
    }
};

class Derived : public Base {
public:
    // Презаписване на функцията print от Base
    void print() override {
        // Специфична реализация за Derived
        // ...
    }

    // Това не е презаписване, тъй като липсва const
    /*
    void display(int x) {
        // Грешка при компилация с override
        // ...
    }
    */

    // Правилно презаписване на функцията display от Base
    void display(int x) const override {
        // Специфична реализация за Derived
        // ...
    }
};