Compartilhar via


Sobrecarga de função

C++ permite a especificação de mais de uma função de mesmo nome no mesmo escopo.Esses são chamados de funções sobrecarregadas e são descritas detalhadamente na sobrecarga.Funções sobrecarregadas permitem que os programadores fornecer uma semântica diferente para uma função, dependendo do número de argumentos e tipos.

Por exemplo, um Imprimir função que usa uma seqüência de caracteres (ou char *) argumento executa tarefas muito diferentes daquele que leva um argumento do tipo double.Sobrecarga permite a nomenclatura uniforme e impede que os programadores tendo inventar nomes como print_sz ou print_d.A tabela a seguir mostra quais partes de uma declaração de função C++ usa para diferenciar entre grupos de funções com o mesmo nome no mesmo escopo.

Considerações de sobrecarga.

Elemento de declaração de função

Usado para sobrecarga?

Tipo de retorno da função

Não

Número de argumentos

Sim

Tipo de argumentos

Sim

Presença ou ausência de reticências

Sim

Uso de typedef nomes

Não

Limites de matriz não especificado

Não

Const ou volatile (veja abaixo)

Sim

Embora as funções podem ser diferenciadas de acordo com o tipo de retorno, eles não podem ser sobrecarregados dessa forma.Constou volatile só são usados como base para a sobrecarga de se forem usados em uma classe para aplicar ao Este o ponteiro para a classe, não a função tipo de retorno.Em outras palavras, sobrecarga só se aplica se o const ou volatile palavra-chave segue a lista de argumentos da função na declaração.

Exemplo

O exemplo a seguir ilustra como sobrecarga pode ser usado.Outra maneira de resolver o problema mesmo é apresentada em Argumentos padrão.

// function_overloading.cpp
// compile with: /EHsc
#include <iostream>
#include <math.h>

// Prototype three print functions.
int print( char *s );                  // Print a string.
int print( double dvalue );            // Print a double.
int print( double dvalue, int prec );  // Print a double with a
//  given precision.
using namespace std;
int main( int argc, char *argv[] )
{
const double d = 893094.2987;
if( argc < 2 )
    {
// These calls to print invoke print( char *s ).
print( "This program requires one argument." );
print( "The argument specifies the number of" );
print( "digits precision for the second number" );
print( "printed." );
exit(0);
    }

// Invoke print( double dvalue ).
print( d );

// Invoke print( double dvalue, int prec ).
print( d, atoi( argv[1] ) );
}

// Print a string.
int print( char *s )
{
cout << s << endl;
return cout.good();
}

// Print a double in default precision.
int print( double dvalue )
{
cout << dvalue << endl;
return cout.good();
}

// Print a double in specified precision.
//  Positive numbers for precision indicate how many digits
//  precision after the decimal point to show. Negative
//  numbers for precision indicate where to round the number
//  to the left of the decimal point.
int print( double dvalue, int prec )
{
// Use table-lookup for rounding/truncation.
static const double rgPow10[] = { 
10E-7, 10E-6, 10E-5, 10E-4, 10E-3, 10E-2, 10E-1, 10E0,
10E1,  10E2,  10E3,  10E4, 10E5,  10E6
    };
const int iPowZero = 6;
// If precision out of range, just print the number.
if( prec < -6 || prec > 7 )
return print( dvalue );
// Scale, truncate, then rescale.
dvalue = floor( dvalue / rgPow10[iPowZero - prec] ) *
rgPow10[iPowZero - prec];
cout << dvalue << endl;
return cout.good();
}

O código anterior mostra a sobrecarga da print função no escopo do arquivo.

Para restrições na sobrecarga e informações sobre como a sobrecarga afeta outros elementos do C++, consulte Sobrecarremento.

Consulte também

Referência

Declarações de função