Бьерн Страуструп.
Язык программирования С++
33
Разные функции обычно имеют разные имена, но функциям, выполняющим сходные операции над
объектами разных типов, лучше дать одно имя. Если типы параметров таких
функций различны, то
транслятор всегда может разобраться, какую функцию нужно вызывать. Например, можно иметь две
функции возведения в степень: одну - для целых чисел, а другую - для чисел с плавающей точкой:
int pow ( int, int );
double pow ( double, double );
//...
x = pow ( 2,10 ); //
вызов pow ( int, int )
y = pow ( 2.0, 10.0 );//
вызов pow ( double, double )
Такое многократное использование имени называется перегрузкой имени функции или просто
перегрузкой; перегрузка рассматривается особо в главе 7.
Параметры
функции могут передаваться либо "по значению", либо "по ссылке". Рассмотрим
определение функции, которая осуществляет взаимообмен значений двух целых переменных. Если
используется стандартный способ передачи параметров по значению, то придется передавать
указатели:
void swap ( int * p, int * q )
{
int t = * p;
* p = * q;
* q = t;
}
Унарная операция * называется косвенностью (или операцией разыменования), она выбирает значение
объекта, на который настроен указатель.
Функцию можно вызывать следующим образом:
void f ( int i, int j )
{
swap ( & i, & j );
}
Если использовать передачу параметра по ссылке, можно обойтись без явных операций с указателем:
void swap (int & r1, int & r2 )
{
int t = r1;
r1 = r2;
r2 = t;
}
void g ( int i, int j )
{
swap ( i, j );
}
Для любого типа T запись T& означает "ссылка на T". Ссылка служит синонимом той переменной,
которой она инициализировалась. Отметим, что перегрузка допускает сосуществование двух функций
swap в одной программе.
Достарыңызбен бөлісу: