Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I always use the override contextual keyword?

I know that the override contextual keyword was introduced to write safer code (by checking for a virtual function with the same signature) but I don't feel good about it, because it seems to be redundant for me to write override every time I want to override a virtual function.

Is it a bad practice to not use override contextual keyword for 99% of cases? Why/when should I have to use it (a compiler warning is not enough when we are hiding a virtual function mistakenly)?

EDIT: In other words; what is the advantage of using the override contextual keyword in C++11 while we always had a compiler warning if we were hiding a virtual function mistakenly in C++03 (without using override contextual keyword)?

like image 732
Sadeq Avatar asked Jul 30 '14 10:07

Sadeq


People also ask

Is the override keyword necessary?

You don't need the override identifier to do this in C++, it simply enforces that you are doing it properly.

What is the purpose of override keyword?

The override keyword is used to extend or modify a virtual/abstract method, property, indexer, or event of base class into a derived class. The new keyword is used to hide a method, property, indexer, or event of base class into derived class.

What is the point of override C++?

Function overriding in C++ is a feature that allows us to use a function in the child class that is already present in its parent class. The child class inherits all the data members, and the member functions present in the parent class.

Why do we use override in C#?

The override modifier is required to extend or modify the abstract or virtual implementation of an inherited method, property, indexer, or event. An override method provides a new implementation of the method inherited from a base class.


2 Answers

The override keyword is totally useful and I would recommend using it all the time.

If you misspell your virtual function it will compile fine but at runtime the program will call the wrong function. It will call the base class function rather than your override.

It can be a really difficult bug to find:

#include <iostream>

class Base
{
public:
    virtual ~Base() {}

    virtual int func()
    {
        // do stuff for bases
        return 3;
    }
};

class Derived
: public Base
{
public:

    virtual int finc() // WHOOPS MISSPELLED, override would prevent this
    {
        // do stuff for deriveds
        return 8;
    }
};

int main()
{
    Base* base = new Derived;

    std::cout << base->func() << std::endl;

    delete base;
}
like image 103
Galik Avatar answered Nov 20 '22 12:11

Galik


Annotations are what you call contextual keywords, they serve as clarification, to make sure anyone who reads the code realizes it is a function that overrides a function in a superclass or a interface. The compiler can also give a warning if the originally overridden feature was removed, in which case you might want to think about removing your function as well.

As far as I know, nothing bad happens if you ommit anotations. It's neither right nor wrong. Like you stated correctly already: annotations are introduced to write safer code. However: They won't change your code in any functional way.

If you work as a single programmer on your own project it might not matter wheter you use them or not. It is however good practice to stick to one style (i.e. either you use it, or you don't use it. Anything inbetween like sometimes using it and sometimes not only causes confusion)

If you work in a Team you should discuss the topic with your teammates and decide wheter you all use it or not.

like image 27
Jonas Maurer Avatar answered Nov 20 '22 10:11

Jonas Maurer