Sobes.tech
Junior

O que é a sobrescrição (override) em C++?

sobes.tech IA

Resposta da IA

A sobrescrita (override) é um mecanismo na programação orientada a objetos, onde uma classe derivada fornece a sua própria implementação específica de uma função virtual declarada na classe base. Quando essa função é chamada através de um ponteiro ou referência à classe base, a implementação do tipo real do objeto (derivado ou base) será executada, dependendo de ter sido sobrescrita.

Pontos principais:

  • Aplica-se apenas a funções ** virtuais**.
  • A assinatura (nome, tipo de retorno, tipos e quantidade de parâmetros) da função que sobrescreve na classe derivada deve coincidir exatamente com a assinatura da função que está sendo sobrescrita na classe base.
  • A palavra-chave override (a partir do C++11) é usada para indicar explicitamente a intenção de sobrescrever uma função. O compilador verificará se a função da classe base realmente existe com essa assinatura e gerará um erro se não existir. Isso ajuda a evitar erros de digitação e torna o código mais legível.

Exemplo:

class Base {
public:
    virtual void print() {
        // Implementação da classe base
        // ...
    }

    virtual void display(int x) const {
        // Outra função virtual
        // ...
    }
};

class Derived : public Base {
public:
    // Sobrescrita da função print de Base
    void print() override {
        // Implementação específica para Derived
        // ...
    }

    // Isto não é uma sobrescrita, pois falta const
    /*
    void display(int x) {
        // Erro de compilação com override
        // ...
    }
    */

    // Sobrescrita correta da função display de Base
    void display(int x) const override {
        // Implementação específica para Derived
        // ...
    }
};