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 |