Sobrecarga de Funções em C++: Guia Prático
Sobrecarga de Funções em C++
Descubra como C++ permite definir múltiplas funções com o mesmo nome, mas assinaturas diferentes, ilustrado com exemplos práticos.
Em C++, duas funções podem compartilhar o mesmo nome desde que suas listas de parâmetros difiram em tipo, número ou ordem. Essas variantes são chamadas de funções sobrecarregadas.
Por exemplo:
// Mesmo nome, argumentos diferentes int teste() { } int teste(int a) { } float teste(double a) { } int teste(int a, double b) { }
Todas as quatro declarações acima representam um conjunto válido de sobrecarga. Note que tipos de retorno são irrelevantes para resolução de sobrecarga; apenas a lista de parâmetros importa. Por exemplo:
// Erro de compilação: assinaturas idênticas int teste(int a) { } double teste(int b){ }
Aqui, ambas as funções têm o mesmo nome, mesmo tipo e mesmo número de argumentos, então o compilador rejeita a duplicata.
Exemplo 1: Sobrecarga com Diferentes Tipos de Parâmetros
// Calcula valor absoluto para int e float #include <iostream> using namespace std; // versão float float absoluto(float var){ return (var < 0.0f) ? -var : var; } // versão int int absoluto(int var){ return (var < 0) ? -var : var; } int main(){ cout << "Valor absoluto de -5 = " << absoluto(-5) << endl; cout << "Valor absoluto de 5.5 = " << absoluto(5.5f) << endl; return 0; }
Saída
Valor absoluto de -5 = 5 Valor absoluto de 5.5 = 5.5
Este programa sobrecarrega absoluto(); o compilador seleciona a versão apropriada baseada no tipo do argumento.
Exemplo 2: Sobrecarga com Diferentes Números de Parâmetros
#include <iostream> using namespace std; // Versão dois parâmetros void exibir(int var1, double var2){ cout << "Inteiro: " << var1; cout << " & Double: " << var2 << endl; } // Versão parâmetro double único void exibir(double var){ cout << "Double: " << var << endl; } // Versão parâmetro int único void exibir(int var){ cout << "Inteiro: " << var << endl; } int main(){ int a = 5; double b = 5.5; exibir(a); exibir(b); exibir(a, b); return 0; }
Saída
Inteiro: 5 Double: 5.5 Inteiro: 5 & Double: 5.5
A chamada para exibir() resolve para a sobrecarga correta baseada no número e tipo de argumentos.
Nota: Funções de biblioteca padrão como sqrt() são fortemente sobrecarregadas, aceitando int, float, double e mais, fornecendo flexibilidade aos desenvolvedores.
Linguagem C
- Dominando Sobrecarga de Métodos em C#: Conceitos, Exemplos e Boas Práticas
- Dominando Sobrecarga de Construtores em C#
- Dominando Operadores em C++: Guia Completo com Exemplos Práticos
- Comentários em C++: Boas Práticas para Código Legível e Manutenível
- Como Passar Arrays para Funções em C++: Guia Prático
- Funções Amigas e Classes Amigas em C++: Dominando o Controle de Acesso
- Como Passar Arrays 1D e 2D para Funções em C – Um Guia Prático
- Sobrecarga de Operadores em C++: Guia Prático com Exemplos de Código
- Funções em C++ Explicadas com Exemplos Práticos de Código
- Dominando Funções em C: Estrutura, Declaração e Boas Práticas