Sobes.tech
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) помага да се избегнат грешки
        // Специфична реализация в наследения клас
    }
};

Основни разлики:

Характеристика Претоварване на методи Презаписване на методи
Място на приложение В един и същи клас В базов и наследен клас
Име на метода Един и същ Един и същ
Подпис на метода Различен Един и същ
Механизъм за избор Статично свързване (компилация) Динамично свързване (изпълнение)
Използва се с Обикновени функции Виртуални функции
Цел Различни действия за различни типове Специфична реализация в наследството