Перегружать функции
C++ позволяет устанавливать нескольких функций с одним и тем же именем в той же области.Это называется перегруженные функции и подробно описаны в перегружен.Перегруженные функции позволяют программистам, чтобы указать различную семантику для функции, в зависимости от типа и количества аргументов.
например, a печать функция, которая принимает строку (или **char ***аргумент) выполняет очень различные задачи, чем версия, которое принимает аргумент типа Двойное с плавающей запятой.Перегружать позволяет форме и предотвращает именования от разработать имена, как разработчики приложений print_sz OR print_d.В следующей таблице показано, какие части объявления функции C++ используется для различения между группами в составе функции с тем же именем в той же области.
Перегружать замечания
элемент объявления функции |
Используется для перегружать? |
---|---|
возвращаемый тип функции |
Нет |
количество аргументов |
Да |
тип аргументов |
Да |
Наличие или отсутствие эллипсов |
Да |
Использование typedef имена |
Нет |
Неуказанных границы массива |
Нет |
Const OR volatile (см. ниже) |
Да |
Хотя функции могут отличаться на основании типа возвращаемого значения, они не могут быть перегружены на это основание.Const OR volatile используйте только в качестве основы для перегружать, если они используются в классе для применения к this указатель для класса, а не типа возвращаемого значения функции.Иначе говоря, применяется, только если перегружающ Const OR volatile ключевое слово за списком аргументов функции в объявлении.
Пример
В следующем примере показано, как можно использовать перегруженные варианты.Еще один способ включения ту же проблему in по умолчанию аргументы.
// 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++ см. в разделе перегрузка.