Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W wielu przypadkach funkcje mają argumenty, które są używane tak często, że wartość domyślna wystarczy. Aby rozwiązać ten problem, obiekt argumentu domyślnego umożliwia określenie tylko tych argumentów funkcji, która ma znaczenie w danym wywołaniu. Aby zilustrować tę koncepcję, rozważmy przykład przedstawiony w temacie Przeciążenie funkcji.
// 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.
W wielu aplikacjach można podać rozsądną wartość domyślną dla prec
programu , eliminując konieczność korzystania z dwóch funkcji:
// 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.
Implementacja print
funkcji została nieco zmieniona, aby odzwierciedlić fakt, że dla typu double
istnieje tylko jedna taka funkcja:
// 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();
}
Aby wywołać nową print
funkcję, użyj kodu, takiego jak:
print( d ); // Precision of 2 supplied by default argument.
print( d, 0 ); // Override default argument to achieve other
// results.
Zwróć uwagę na następujące punkty podczas używania argumentów domyślnych:
Argumenty domyślne są używane tylko w wywołaniach funkcji, w których pominięto argumenty końcowe — muszą być ostatnimi argumentami. W związku z tym następujący kod jest nielegalny:
int print( double dvalue = 0.0, int prec );
Nie można ponownie zdefiniować argumentu domyślnego w późniejszych deklaracjach, nawet jeśli ponowne zdefiniowanie jest identyczne z oryginałem. W związku z tym następujący kod generuje błąd:
// Prototype for print function. int print( double dvalue, int prec = 2 ); ... // Definition for print function. int print( double dvalue, int prec = 2 ) { ... }
Problem z tym kodem polega na tym, że deklaracja funkcji w definicji ponownie definiuje argument domyślny dla elementu
prec
.Dodatkowe argumenty domyślne mogą być dodawane przez późniejsze deklaracje.
Argumenty domyślne można podać dla wskaźników do funkcji. Na przykład:
int (*pShowIntVal)( int i = 0 );