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