Partager via


Arguments par défaut

Dans de nombreux cas, les fonctions ont des arguments qui sont utilisés rarement de sorte qu'une valeur par défaut suffirait.Pour remédier à cela, la fonctionnalité d'argument par défaut permet de spécifier uniquement les arguments d'une fonction qui sont explicites dans un appel donné.pour illustrer ce concept, considérez l'exemple présenté dans surcharge de fonction.

// 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.

Dans de nombreuses applications, une valeur par défaut raisonnable peut être fournie pour prec, éliminant le besoin de deux fonctions :

// Prototype two print functions.
int print( char *s );                    // Print a string.
int print( double dvalue, int prec=2 );  // Print a double with a
//  given precision.

L'implémentation de la fonction d' print est modifiée légèrement pour refléter le fait qu'une telle fonction existe pour le type double:

// default_arguments.cpp
// compile with: /EHsc /c

// 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.

#include <iostream>
#include <math.h>
using namespace std;

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 )
      // Scale, truncate, then rescale.
      dvalue = floor( dvalue / rgPow10[iPowZero - prec] ) *
      rgPow10[iPowZero - prec];
   cout << dvalue << endl;
   return cout.good();
}

Pour appeler la nouvelle fonction d' print , utilisez un code similaire à ce qui suit :

print( d );    // Precision of 2 supplied by default argument.
print( d, 0 ); // Override default argument to achieve other
//  results.

Tenez compte des points en utilisant des arguments par défaut :

  • Les arguments par défaut sont utilisés uniquement dans les appels de fonction où les arguments de fin sont omis - ils doivent être les derniers arguments.Par conséquent, le code suivant est non conforme :

    int print( double dvalue = 0.0, int prec );
    
  • Un argument par défaut ne peut pas être redéfini dans les déclarations suivantes même si la redéfinition est identique à l'original.Par conséquent, le code suivant génère une erreur :

    // Prototype for print function.
    int print( double dvalue, int prec = 2 );
    
    ...
    
    // Definition for print function.
    int print( double dvalue, int prec = 2 )
    {
    ...
    }
    

    le problème avec ce code est que la déclaration de fonction dans la définition redéfinit l'argument par défaut pour prec.

  • Les arguments par défaut supplémentaires peuvent être ajoutés par des déclarations ultérieures.

  • Les arguments par défaut peuvent être fournis pour les pointeurs fonction.Par exemple :

    int (*pShowIntVal)( int i = 0 );
    

Voir aussi

Référence

Déclarateurs de abrégé sur C++