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-ից սկսած) օգնում է խուսափել սխալներից
        // Հատուկ իրականացում ժառանգական դասում
    }
};

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

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