Tim Tim - 1 month ago 11
C++ Question

Do overriding functions need to be specified virtual?

In Cplusplus, in a derived class, if we define a member function to override a member function in its parent class, do we need to declare the one in the derived class to be virtual?

For example, do we need to declare

g
to be virtual in
B
in order for it to override
A::g
? which one of the following is correct for the above purpose?

class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
void g(){printf("B");}
}


or

class A{
public:
void f(){printf("A");}
virtual void g(){printf("A");}
}
class B : public A{
public:
void f(){printf("B");}
virtual void g(){printf("B");}
}


Thanks.

Answer

No you don't. The function is virtual from the first point in the hierarchy where you declare it as such.

You can and should specify it as override in c++11 and onward. It specifies explicitly to the compiler that you are trying to override a virtual function in a base class. It than emits an error if you misspell the function name, mistype the parameters or do anything else that can be considered as adding an overload of the function. Prior to c++11, the previous mistakes would silently compile.

Comments