Junior
C++-də metodların yüklənməsi və yenidən təyin edilməsi nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Method Overloading (Method Overloading):
- Bir sinifda bir xil nom bilan bir nechta metodlarga ega bo'lish imkonini beradi.
- Ular signatura (parametrlar soni va/tiplar) bo'yicha farq qiladi.
- Qaytarish turi overloading uchun signatura ta'rifida qatnashmaydi.
- Aniq metod tanlovi, chaqiruvda argumentlarning tiplari asosida kompilator tomonidan belgilanadi (statik bog'lanish).
class MyClass {
public:
void print(int a) {
// Butun sonni chiqarish
}
void print(double d) {
// Oqimli sonni chiqarish
}
void print(int a, int b) {
// Ikki butun sonni chiqarish
}
};
Metodlarni qayta yozish (Method Overriding):
- Meros olgan sinf, asosiy sinfda belgilangan metodning maxsus implementatsiyasini taqdim etishi mumkin.
- Meros olgan sinfdagi metod xuddi shunday signatura (nom, parametrlar soni va tiplari) va ayni vaqtda qaytarish turi (kovariant qaytarish turi) bo'lishi kerak.
- Bu virtual funksiyalar (
virtual) bilan ishlatiladi va polimorfizmni amalga oshirish uchun. - Aniq metod implementatsiyasi, ish vaqtida (dinamik bog'lanish) aniqlanadi va ob'ektning haqiqiy turiga bog'liq.
class Base {
public:
virtual void display() {
// Asosiy sinfdagi implementatsiya
}
};
class Derived : public Base {
public:
void display() override { // override kalit so'zi (C++11 dan boshlab) xatolarni oldini oladi
// Maxsus implementatsiya meros olgan sinfda
}
};
Asosiy farqlar:
| Xususiyat | Method Overloading | Method Overriding |
|---|---|---|
| Qo'llash joyi | Bir sinf ichida | Asosiy va meros sinflarda |
| Method nomi | Taka shunday | Taka shunday |
| Signatura metod | Farq qiladi | Taka shunday |
| Mekanizm tanlovi | Statik bog'lanish (kompilatsiya) | Dinamik bog'lanish (ishga tushirish) |
| Ishlatiladi bilan | Oddiy funksiyalar | Virtual funksiyalar |
| Maqsad | Turli tiplarga turli harakatlar qilish | Meros olgan sinfda maxsus implementatsiya |