Sobrecarga de nome de funções
Next: Encapsulação Up: Funções Previous: Número variável de argumentos Sumário
Em ANSI-C, duas funções devem ter nomes obrigatoriamente únicos. Em C ++, uma vez que o mecanismo de prototipagem permite identificar uma função por seu nome e seus argumentos, é possível repetir nome de funções -- é o mecanismo de sobrecarga. Este mecanismo é frequentemente utilizado na programação orientada a objetos.
O exemplo abaixo ilustra o uso deste mecanismo. Neste caso, três funções são definidas com o mesmo nome. No momento da chamada, o compilador seleciona a função correta com base em seu nome e no número de e tipos dos parâmetros formais.
int do_stuff(float); // This triples a float & returns int
cout "12 squared is " do_stuff(index) begintex2html_wrap_inline$$n";
cout "24 squared is " do_stuff(2 index) begintex2html_wrap_inline$$n";
cout "Three lengths is " do_stuff(length) begintex2html_wrap_inline$$n";
cout "Three heights is " do_stuff(height) begintex2html_wrap_inline$$n";
cout "The average is " do_stuff(length,height) begintex2html_wrap_inline$$n";
return in_value in_value;
int do_stuff(float in_value) // Triples a float & return int
return (int)(3.0 in_value);
return (in1 + in2) 2.0;
O resultado da execução deste programa deve ser:
24 squared is 576
Three lengths is 42
Three heights is 102
The average is 24.330002
Observe que o tipo de retorno da função não é um critério de seleção para determinar qual função será chamada.
A palavra chave overload dá uma indicação que o nome a seguir, neste caso do_stuff, será conscientemente sobrecarregado, e que isto não está acontecendo por engano. Entretanto, esta palavra chave era apenas obrigatória em versões mais antigas de C ++; correntemente, este mecanismo é tão utilizado que usar sobrecarga é a situação padrão, não sendo necessário indicar mais seu uso. A opção de uso desta palavra é mantido por questões de compatibilidade com códigos de versões anteriores.
Deve-se ainda observar que a seleção da função é feita em tempo de compilação, e não em tempo de execução. Desta forma, não há prejuízo no desempenho do programa ao se utilizar este mecanismo. Mesmo que cada uma destas funções tivesse um nome único não haveria diferença no tamanho do programa ou em seu tempo de execução.