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-ի համար
        // ...
    }
};