next up previous contents
Next: Encapsulação Up: Funções Previous: Número variável de argumentos   Sumário

Sobrecarga de nome de funções

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.

indentation

#include $<$iostream.h$>$

overload do_stuff; // This is optional

int do_stuff(const int); // This squares an integer
int do_stuff(float); // This triples a float & returns int
float do_stuff(const float, float); // This averages two floats

main()
{
int index = 12;
float length = 14.33;
float height = 34.33;

cout $\ll$ "12 squared is " $\ll$ do_stuff(index) $\ll$ begintex2html_wrap_inline$$n";
cout $\ll$ "24 squared is " $\ll$ do_stuff(2 $\ast$ index) $\ll$ begintex2html_wrap_inline$$n";
cout $\ll$ "Three lengths is " $\ll$ do_stuff(length) $\ll$ begintex2html_wrap_inline$$n";
cout $\ll$ "Three heights is " $\ll$ do_stuff(height) $\ll$ begintex2html_wrap_inline$$n";
cout $\ll$ "The average is " $\ll$ do_stuff(length,height) $\ll$ begintex2html_wrap_inline$$n";
}

int do_stuff(const int in_value) // This squares an integer
{
return in_value $\ast$ in_value;
}

int do_stuff(float in_value) // Triples a float & return int
{
return (int)(3.0 $\ast$ in_value);
}

// This averages two floats
float do_stuff(const float in1, float in2)
{
return (in1 + in2)$/$2.0;
}
O resultado da execução deste programa deve ser:
    12 squared is 144
    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.


next up previous contents
Next: Encapsulação Up: Funções Previous: Número variável de argumentos   Sumário
Ivan Luiz Marques Ricarte 2001-06-01