For example:
class Base { virtual void my_function() = 0; }; class Derived : Base { void my_function() override; };
From what I read, the override
keyword is used to make sure that we have the correct signature in the function that we are overriding, and it seems to be its only use.
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 (or Base class, depending on how one see things). So, is there any point in adding override
at the end of Derived::my_function()
declaration?
¶ Δ A pure virtual function is a function that must be overridden in a derived class and need not be defined. A virtual function is declared to be “pure” using the curious =0 syntax.
The virtual keyword can be used when declaring overriding functions in a derived class, but it is unnecessary; overrides of virtual functions are always virtual. Virtual functions in a base class must be defined unless they are declared using the pure-specifier.
Yes, you need to use the override keyword, otherwise the method will be hidden by the definition in the derived class.
3) If we do not override the pure virtual function in derived class, then derived class also becomes abstract class.
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.
Yes, it is a good idea to use override
keyword consistently as a defensive practice.
Consider a redesign when the author of the Base
decides that my_function
should no longer be a pure virtual, and also that it should take a new parameter. With override
in place the compiler will catch this problem; without an override
your Derived
class would continue to compile.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With