Condividi tramite


Overload di funzione

C++ consente la specifica di più funzioni con lo stesso nome nello stesso ambito.Questi sono denominati funzioni in overload e sono descritti in dettaglio in overload.Le funzioni in overload consentono ai programmatori per garantire una semantica differente per una funzione, a seconda dei tipi e il numero di argomenti.

Ad esempio, a stampa funzione che accetta una stringa (o **char ***l'argomento) esegue le attività molto diversi che accetta un argomento di tipo doppio.Esegue l'overload delle autorizzazioni uniformare denominazione e impedire ai programmatori di dover definire i nomi come print_sz o print_d.Nella tabella riportata di seguito parti di una dichiarazione di funzione C++ vengono utilizzati per distinguere tra gruppi di funzioni con lo stesso nome nello stesso ambito.

considerazioni di overload

Elemento della dichiarazione di funzione

Utilizzato per eseguire l'overload?

Tipo restituito dalla funzione

No

Numero di argomenti

tipo di argomenti

Presenza o assenza di sospensione

utilizzo di typedef nomi

No

Limiti della matrice non specificati

No

const o volatile (vedere di seguito)

Sebbene le funzioni siano distinte in base al tipo restituito, non possono essere sottoposte a overload su questa base.Const o volatile vengono utilizzati solo come base per eseguire l'overload se utilizzati in una classe da applicare a ciò puntatore per la classe, non il tipo restituito della funzione.Ovvero l'overload si applica solo se const o volatile la parola chiave segue l'elenco di argomenti della funzione nella dichiarazione.

Esempio

Nell'esempio seguente viene illustrato come eseguire l'overload di può essere utilizzato.Un altro modo per risolvere lo stesso problema è verificata in argomenti predefiniti.

// 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();
}

Il codice precedente mostra l'overload di print funzione sottoposta file.

Per le restrizioni sull'overload e informazioni su come eseguire l'overload di influisce su altri elementi del linguaggio C++, vedere L'overload.

Vedere anche

Riferimenti

Dichiarazioni di funzione