深度探究深度探究C++中的函数重载的用法中的函数重载的用法
C++ 允许同一范围内具有相同名称的多个函数的规范。这些函数称为重载函数,“重载”中对其进行了详细介绍。利用重载函
数,程序员可以根据参数的类型和数量为函数提供不同的语义。
例如,采用字符串(或 char *)参数的 print 函数执行的任务与采用“双精度”类型的参数的函数执行的任务截然不同。重载允
许通用命名并使程序员无需创建名称,例如 print_sz 或 print_d。下表显示了 C++ 使用函数声明的哪些部分来区分同一范围内
具有相同名称的函数组。
重载注意事项重载注意事项
函数声明元素函数声明元素 是否用于重载?是否用于重载?
函数返回类型 No
参数的数量 是
参数的类型 是
省略号存在或缺失 是
typedef 名称的使用 否
未指定的数组边界 否
const 或 volatile(见下文) 是
虽然可以根据返回类型区分函数,但是无法在此基础上对它们进行重载。仅当 Const 或 volatile 在类中用于应用于类的 this 指
针(而不是函数的返回类型)时,它们才用作重载的基础。换言之,仅当 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();
}