函数重载、
C++ 允许同一名称的函数的规范在同一范围的。这些重载在调用重载函数和详细介绍。重载函数使程序员能够根据参数的类型和数量提供函数的语义不同,。
例如,接受字符串的 打印 函数 (或 char *) 参数比采用类型 二进制文件参数的一个执行非常不同的任务。重载允许名为的统一并防止程序员必须开发名称例如 print_sz 或 print_d。下表显示函数声明 C++ 的哪些部分使用分清函数的组之间同名的在同一范围。
重载注意事项
函数声明元素 |
用于重载? |
---|---|
函数返回类型 |
否 |
参数数目 |
是 |
参数的类型 |
是 |
是否存在省略号 |
是 |
为 typedef 名称的使用 |
否 |
未指定的数组界限 |
否 |
const 或 volatile (下文) |
是 |
尽管函数可以是已知的根据返回类型,它们无法重载基于此基类型。Const 或 volatile 不基于重载只使用,如果在类应用于 这 类的指针,而不是函数的返回类型。换言之,因此,只有当 const 或 volatile 关键字在图例中,遵循函数的参数列表重载适用。
示例
下面的示例演示如何使用重载。另一种方法解决该问题。 默认参数存在。
// function_overloading.cpp
// compile with: /EHsc
#include <iostream>
#include <math.h>
// 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.
using namespace std;
int main( int argc, char *argv[] )
{
const double d = 893094.2987;
if( argc < 2 )
{
// These calls to print invoke print( char *s ).
print( "This program requires one argument." );
print( "The argument specifies the number of" );
print( "digits precision for the second number" );
print( "printed." );
exit(0);
}
// Invoke print( double dvalue ).
print( d );
// Invoke print( double dvalue, int prec ).
print( d, atoi( argv[1] ) );
}
// Print a string.
int print( char *s )
{
cout << s << endl;
return cout.good();
}
// Print a double in default precision.
int print( double dvalue )
{
cout << dvalue << endl;
return cout.good();
}
// 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.
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 )
return print( dvalue );
// Scale, truncate, then rescale.
dvalue = floor( dvalue / rgPow10[iPowZero - prec] ) *
rgPow10[iPowZero - prec];
cout << dvalue << endl;
return cout.good();
}
上面的代码在文件范围内显示重载 print 功能。
有关重载和信息的限制与重载、如何影响 C++ 的其他元素,请参见 重载。