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 дан бошлаб) хато қўлланишлардан сақлайди
// махсус амалга ошириш
}
};
Асосий фарқлар:
| Хусусият | Методларнинг юкламаси | Методларнинг қайта ишланиши |
|---|---|---|
| Қўлланиш жойи | Бир класс ичида | Базавий ва наследий классларда |
| Метод исми | Бир хил | Бир хил |
| Имзо | Турлича | Бир хил |
| Танлов механизми | Статик боғланиш (компиляция) | Динамик боғланиш (иш вақтида) |
| Қўлланилади | Оддий функциялар | Виртуал функциялар |
| Мақсад | Турли турлар учун турли амаллар | Наследчида махсус амалга ошириш |