override (especificador)
Puede utilizar la palabra clave de override para informar de las funciones miembro que invalida una función virtual de una clase base.
function-declaration override;
Comentarios
override es contextual y tiene un significado especial cuando ha utilizado después de una declaración de función miembro; si no, no es una palabra clave reservada.
Ejemplo
Uso override para evitar comportamiento inadvertido de herencia en el código.El ejemplo siguiente se muestra dónde, sin utilizar override, el comportamiento de la función miembro de clase derivada no haya sido pensado.El compilador no genera ninguna errores para este código.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA(); // ok, works as intended
virtual void funcB(); // DerivedClass::funcB() is non-const, so it does not
// override BaseClass::funcB() const and it is a new member function
virtual void funcC(double = 0.0) override; // DerivedClass::funcC(double) has a different
// parameter type than BaseClass::funcC(int), so
// DerivedClass::funcC(double) is a new member function
};
Cuando se utiliza override, el compilador genera errores en lugar silenciosamente de crear nuevas funciones miembro.
class BaseClass
{
virtual void funcA();
virtual void funcB() const;
virtual void funcC(int = 0);
void funcD();
};
class DerivedClass: public BaseClass
{
virtual void funcA() override; // ok
virtual void funcB() override; // compiler error: DerivedClass::funcB() does not
// override BaseClass::funcB() const
virtual void funcC( double = 0.0 ) override; // compiler error: DerivedClass::funcC(double) does not
// override BaseClass::funcC(int)
void funcD() override; // compiler error: DerivedClass::funcD() does not
// override the non-virtual BaseClass::funcD()
};
Para especificar las funciones no se pueden reemplazar y que las clases no pueden heredar, utilice la palabra clave de final.