Výchozí argumenty
V mnoha případech obsahují argumenty, tak zřídka používané, výchozí hodnota by postačovat.Pokud chcete, umožňuje zadání pouze tyto argumenty funkce, které jsou smysluplné volání dané zařízení výchozí argument.Pro ilustraci tohoto konceptu zvažte příklad v Přetížení funkce.
// 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.
V mnoha aplikacích lze zadat výchozí přiměřené pro prec, což eliminuje potřebu dvě funkce:
// 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.
Provádění print funkce mírně změněno zohlednila skutečnost, že existuje pouze jedna taková funkce typu dvojité:
// 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();
}
Vyvolat nové print fungovat, použijte například následující kód:
print( d ); // Precision of 2 supplied by default argument.
print( d, 0 ); // Override default argument to achieve other
// results.
Poznámka: tyto body při použití výchozí argumenty:
Výchozí argumenty jsou používány pouze ve volání funkce kde jsou vynechány argumenty koncové – musí být poslední argumenty.Proto je nelegální následující kód:
int print( double dvalue = 0.0, int prec );
Výchozí argument nelze předefinovat v prohlášení vyšší i v případě, že je stejný jako původní předefinováním.Následující kód vytvoří proto chybu:
// Prototype for print function. int print( double dvalue, int prec = 2 ); ... // Definition for print function. int print( double dvalue, int prec = 2 ) { ... }
Problém s tímto kódem je, že deklaraci funkce v definici předefinuje výchozí argument pro prec.
Výchozí další argumenty lze přidat později prohlášení.
Výchozí argumenty může být poskytován odkazy na funkce.Příklad:
int (*pShowIntVal)( int i = 0 );