Standardargumente

In vielen Fällen werden Funktionen Argumente, die selten verwendet werden, dass ein Standardwert genügen.Wenn Sie dieses Argument DEFAULT adressieren, darf die Funktion nur zum Angeben dieser Argumente an eine Funktion, die in einem bestimmten Aufruf von Bedeutung sind.Um zu veranschaulichen, wird dieses Konzept Betrachten Sie als Beispiel das in Funktionsüberladungdargestellt.

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

In vielen Anwendungen kann ein angemessener Standardwert für precangegeben werden, und die Anforderung für zwei Funktionen nicht mehr erforderlich:

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

Die Implementierung der print-Funktion ist geringfügig geändert, um die Tatsache, dass nur eine solche Funktion für den Typ doublevorhanden ist:

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

Um die neue print-Funktion aufrufen, um Code wie dem folgenden:

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

Beachten Sie, dass diese Punkte, wenn Standardargumente verwendet werden:

  • Standardargumente sind nur in Funktionsaufrufen verwendet, in denen nachfolgende Argumente ausgelassen werden, müssen sie die letzten Argumente handeln.Daher ist der folgende Code gültig:

    int print( double dvalue = 0.0, int prec );
    
  • Ein Standardargument kann nicht in späteren Deklaration neu definiert werden, auch wenn die Neudefinition der Vorlage identisch ist.Daher generiert der folgende Code einen Fehler:

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

    Das Problem besteht darin, dass mit diesem Code in der Definition der Funktionsdeklaration das standardmäßige Argument für precneu definiert.

  • Zusätzliche Standardargumente können durch neuere Deklarationen hinzugefügt werden.

  • Standardargumente können für Zeiger auf Funktionen bereitgestellt werden.Beispiele:

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

Siehe auch

Referenz

C++-abstrakte Deklaratoren