Sobes.tech
Junior

O que são sobrecarga e sobrescrição de métodos em C++?

sobes.tech IA

Resposta da IA

Sobrecarga de métodos (Method Overloading):

  • Permite ter vários métodos com o mesmo nome numa classe.
  • Diferenciam-se pela assinatura (número e/ou tipos de parâmetros).
  • O tipo de retorno não participa na definição da assinatura para sobrecarga.
  • A seleção de um método específico é determinada pelo compilador com base nos tipos de argumentos na chamada (ligação estática).
class MyClass {
public:
    void print(int a) {
        // Imprimir número inteiro
    }

    void print(double d) {
        // Imprimir número de ponto flutuante
    }

    void print(int a, int b) {
        // Imprimir dois números inteiros
    }
};

Sobrescrita de métodos (Method Overriding):

  • Permite que a classe herdada forneça uma implementação específica de um método que já está definido na classe base.
  • O método na classe herdada deve ter a mesma assinatura (nome, quantidade e tipos de parâmetros) e o mesmo tipo de retorno (ou um tipo de retorno covariante).
  • É usado com funções virtuais (virtual) para implementar o polimorfismo.
  • A seleção da implementação concreta do método é determinada em tempo de execução (ligação dinâmica), dependendo do tipo real do objeto.
class Base {
public:
    virtual void display() {
        // Implementação na classe base
    }
};

class Derived : public Base {
public:
    void display() override { // A palavra-chave override (a partir do C++11) ajuda a evitar erros
        // Implementação específica na classe herdada
    }
};

Diferenças principais:

Característica Sobrecarga de Métodos Sobrescrita de Métodos
Lugar de aplicação Em uma mesma classe Em classes base e derivadas
Nome do método Mesmo Mesmo
Assinatura do método Diferente Igual
Mecanismo de seleção Ligação estática (compilação) Ligação dinâmica (execução)
Usado com Funções normais Funções virtuais
Objetivo Ações diferentes para diferentes tipos Implementação específica na herança