Поделиться через


Перегружать функции

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++ см. в разделе перегрузка.

См. также

Ссылки

Объявления функции