Open yanaskyrda opened 4 years ago
Коли перевизначається virtual функція базового класу. class A{ public: virtual void func()=0; }; class B:public A{ public : void func()override { // } };
Function overriding- це перевизначення функції базового класу у похідному класі з однаковою сигнатурою, тобто типом повернення та параметрами. Але можуть бути ситуації, коли програміст помиляється, перекриваючи цю функцію. Отже, щоб відслідковувати таку помилку, використовують ключове слово override. Override змусить компілятор перевірити базовий клас, щоб побачити, чи існує віртуальна функція з такою самою сигнатурою. А якщо ні, компілятор покаже помилку.
using namespace std;
class Base {
public:
virtual void func()
{
cout << "I am in base" << endl;
}
};
class derived : public Base {
public:
// did a silly mistake by putting
// an argument "int a"
void func(int a) override
{
cout << "I am in derived class" << endl;
}
};
int main() { Base b; derived d; cout << "Compiled successfully" << endl; return 0; }
Такий код не скомпілюється оскільки сигнатури у двох функцій різні. Якби не було ключового слова override, такий код не скомпілювався б.
Коли потрібно перевизначити чи довонити функцію базового класу
class StudentWithRandom : Student { public override double GenerateResult(Competition competition) { double result = base.GenerateResult(competition); result += random.NextDouble() * result; LastResult = result; return result; }
За допомогою override можна уникнути випадкової поведінки спадкування у коді.
class BaseClass { virtual void funcA(); virtual void funcB() const; virtual void funcC(int = 0); void funcD(); };
class DerivedClass: public BaseClass { virtual void funcA(); virtual void funcB(); virtual void funcC(double = 0.0); };
Цей приклад показує, в якій ситауції без використання override поведінку похідного класу може бути випадковим. Компілятор не видає помилки при використанні цього коду.
override після методу вказує на те, що цей метод є перевизначеним методом базового класу. Цей модифікатор не впливає на рантайм, але якщо, наприклад, у базовому класі не буде такого методу, то програма не скомпілюється. Він потрібен, скоріше, для зручності
override перевизначає метод базового классу, ставиться після методу
Ключове слово override призначене для перевизначення методів при наслідуванні. Ставиться після методу
Наприклад, є базовий клас, а у ньому є virtual функція. Нам потрібно переписати цю функцію у деякому класі, що наслідує базовий клас. Тоді, для цього необхідно використовувати override.