However, in the case of a pure virtual function, the compiler would throw an error if we used an incorrect signature in the Derived class
No, this compiles:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function(int);
// ^^^ mistake!
};
While this does not:
class Base {
virtual void my_function() = 0;
};
class Derived : Base {
void my_function(int) override;
};
error:
void Derived::my_function(int)
markedoverride
, but does not override
The error you’re talking about only occurs when instantiating Derived
– override
allows you to catch the mistake earlier and makes the definition of Derived
clearer/more readable.