Sobes.tech
Junior

Ինչ է մեթոդների ավելցուկային և վերաշարադրությունը C++-ում։

sobes.tech AI

Պատասխան AI-ից

Մեթոդների բեռնվածություն (Method Overloading):

  • Թույլ է տալիս մի քանի մեթոդ ունենալ նույն անունով մեկ դասում:
  • Տարբեր են համայնքով (պարամետրերի քանակով և/կամ տիպերով):
  • Վերադարձվող տիպը չի մասնակցում հագեցման նշանագրին:
  • Կատարյալ մեթոդը որոշվում է կոմպիլյատորով արգումենտների տիպերի հիման վրա (ստատիկ կապում):
class MyClass {
public:
    void print(int a) {
        // Հրատարակել ամբողջ թիվ
    }

    void print(double d) {
        // Հրատարակել տատանվող թիվ
    }

    void print(int a, int b) {
        // Հրատարակել երկու ամբողջ թիվ
    }
};

Մեթոդների բեռնվածություն (Method Overloading):

  • Թույլ է տալիս ժառանգական դասին տրամադրել հատուկ իրականացում այն մեթոդի, որը արդեն սահմանված է բազային դասում:
  • Բաժանորդագրված դասում մեթոդը պետք է ունենա նույն նշանագրությունը (անուն, պարամետրերի քանակը և տիպերը) և նույն վերադարձվող տիպը (կամ կովարիանտային տիպ):
  • Օգտագործվում է վիրտուալ ֆունկցիաների (virtual) հետ՝ պոլիմորֆիզմի իրականացման համար:
  • Արդյունավետ իրականացման ընտրությունը որոշվում է ժամանակի ընթացքում (դինամիկ կապում), ըստ օբյեկտի իրական տիպի:
class Base {
public:
    virtual void display() {
        // Բազային դասի իրականացում
    }
};

class Derived : public Base {
public:
    void display() override { // override բառը (C++11-ից սկսած) օգնում է խուսափել սխալներից
        // Հատուկ իրականացում ժառանգական դասում
    }
};

Հիմնական տարբերությունները՝

Գծագրություն Մեթոդների բեռնվածություն Մեթոդների վերագրում
Կիրառման վայր Մի դասի մեջ Բազային և ժառանգական դասերում
Մեթոդի անունը Նույնը Նույնը
Գծագրություն Տարբեր Նույնը
Ընտրության մեխանիզմը Ստատիկ կապում (կոմպիլյացիա) Դինամիկ կապում (աշխատանքային)
Օգտագործվում է Ընդհանրապես ֆունկցիաներ Վիրտուալ ֆունկցիաներ
Մաքսիմում նպատակ Տարբեր գործողություններ տարբեր տիպերի համար Հատուկ իրականացում ժառանգում