O modificador override indica que a função declarada deve substituir o método da classe pai. O uso deste modificador permite evitar erros durante as substituições, por exemplo, durante uma alteração aleatória na assinatura do método. Ou, por exemplo, na classe base, está definido o método func, ele é usado como argumento da variável do tipo int:
class CFoo
{
void virtual func(int x) const { }
};
A seguir, o método é substituído na classe que está sendo herdada:
class CBar : public CFoo
{
void func(short x) { }
};
No entanto, no caso de haver um erro, o tipo de argumento é alterado de int para short. De fato, aqui acontece uma sobrecarga do método. Agindo em conformidade com o algoritmo de estabelecimento da função sobrecarregada, em determinadas situações, o compilador pode selecionar o método definido na classe base, em vez de escolher o método de substituição.
Para evitar esses erros, é necessário adicionar o modificador override ao método de substituição.
class CBar : public CFoo
{
void func(short x) override { }
};
Se, durante a substituição, for alterada a assinatura do método, o compilador não conseguirá encontrar, na classe pai, o método com essa mesma assinatura e emitir o erro de compilação:
'CBar::func' method is declared with 'override' specifier but does not override any base class method