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-ից սկսած) օգնում է խուսափել սխալներից
// Հատուկ իրականացում ժառանգական դասում
}
};
Հիմնական տարբերությունները՝
| Գծագրություն | Մեթոդների բեռնվածություն | Մեթոդների վերագրում |
|---|---|---|
| Կիրառման վայր | Մի դասի մեջ | Բազային և ժառանգական դասերում |
| Մեթոդի անունը | Նույնը | Նույնը |
| Գծագրություն | Տարբեր | Նույնը |
| Ընտրության մեխանիզմը | Ստատիկ կապում (կոմպիլյացիա) | Դինամիկ կապում (աշխատանքային) |
| Օգտագործվում է | Ընդհանրապես ֆունկցիաներ | Վիրտուալ ֆունկցիաներ |
| Մաքսիմում նպատակ | Տարբեր գործողություններ տարբեր տիպերի համար | Հատուկ իրականացում ժառանգում |