Aracılığıyla paylaş


Varsayılan bağımsız değişkenleri

Çoğu durumda, bu nedenle seyrek kullanılan bağımsız değişkenler işlevleri olan, varsayılan değer yeterli.Bu adres için yalnızca belirli bir çağrıda anlamlı Bu değişkenler işleve belirtmek için varsayılan bağımsız değişken olanağı verir.Bu kavram göstermek için gösterilen örneði ele alalým İşlevlerin aşırı.

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

Birçok uygulamada için makul bir varsayılan sağlanabilir prec, iki işlev gereksiz:

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

Uygulaması, print türü için tek bir işlevi bulunduğunu gerçeği yansıtacak şekilde işlevi biraz değişti çift:

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

Yeni çağırmak için print işlev, aşağıdaki gibi bir kod kullanın:

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

Varsayılan bağımsız değişkenleri kullanırken aşağıdaki noktaları unutmayın:

  • Varsayılan bağımsız değişkenleri yalnızca işlev çağrıları nerede sonunda bağımsız değişkenler göz ardı edilir kullanılır — son bağımsız değişken olmalıdır.Bu nedenle, aşağıdaki kodu geçersiz:

    int print( double dvalue = 0.0, int prec );
    
  • Şemadaki özgün aynı olsa bile, varsayılan bağımsız değişken sonraki bildirilerinde tanımlanamaz.Bu nedenle, aşağıdaki kod bir hata üretir:

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

    Bu kodu tanımında işlev bildirimi için varsayılan bağımsız değişken yeniden tanımlar sorundur prec.

  • Ek varsayılan bağımsız değişkenleri tarafından sonraki bildirimleri eklenebilir.

  • Varsayılan bağımsız değişkenleri için işaretçiler işlevlerine sağlanabilir.Örne?in:

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

Ayrıca bkz.

Başvuru

C++ Abstract Declarators