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 Overriding):
- Позволява на наследения клас да предостави специфична реализация на метод, който вече е дефиниран в базовия клас.
- Методът в наследения клас трябва да има същата подпис (име, брой и типове параметри) и същия тип връщане (или ковариантен тип връщане).
- Използва се с виртуални функции (
virtual) за реализиране на полиморфизъм. - Изборът на конкретната реализация на метода се определя по време на изпълнение (динамично свързване), в зависимост от реалния тип на обекта.
class Base {
public:
virtual void display() {
// Реализация в базовия клас
}
};
class Derived : public Base {
public:
void display() override { // Ключовата дума override (от C++11) помага да се избегнат грешки
// Специфична реализация в наследения клас
}
};
Основни разлики:
| Характеристика | Претоварване на методи | Презаписване на методи |
|---|---|---|
| Място на приложение | В един и същи клас | В базов и наследен клас |
| Име на метода | Един и същ | Един и същ |
| Подпис на метода | Различен | Един и същ |
| Механизъм за избор | Статично свързване (компилация) | Динамично свързване (изпълнение) |
| Използва се с | Обикновени функции | Виртуални функции |
| Цел | Различни действия за различни типове | Специфична реализация в наследството |