Функция может возвращать ссылку. В программировании на C++ предусмотрено несколько применений для ссылочных значений, возвращаемых функциями. Сейчас мы продемонстрируем только некоторые из них, а другие рассмотрим ниже в этой книге, когда познакомимся с перегрузкой операторов.
Если функция возвращает ссылку, это означает, что она возвращает неявный указатель на значение, передаваемое ею в инструкции
// Возврат ссылки.
#include
using namespace std;
double &f();
double val = 100.0;
int main()
{
double newval;
cout << f() << '\n'; // Отображаем значение val.
newval = f(); // Присваиваем значение val переменной newval.
cout << newval << '\n'; // Отображаем значение newval.
f() = 99.1; // Изменяем значение val.
cout << f() << '\n'; // Отображаем новое значение val.
return 0;
}
double &f()
{
return val; // Возвращаем ссылку на val.
}
Вот как выглядят результаты выполнения этой программы.
100
100
99.1
Рассмотрим эту программу подробнее. Судя по прототипу функции
cout << f() << '\n'; // Отображаем значение val.
После вызова функция
return val; // Возвращаем ссылку на val.
автоматически возвращается ссылка на глобальную переменную
При выполнении строки
newval = f(); //Присваиваем значение val переменной newval.
ссылка на переменную
А вот самая интересная строка в программе.
f() = 99.1; // Изменяем значение val.
При выполнении этой инструкции присваивания значение переменной
Наконец, при выполнении строки
cout << f() << '\n'; // Отображаем новое значение val.
отображается новое значение переменной
Приведем еще один пример программы, в которой в качестве значения, возвращаемого функцией, используется ссылка (или значение ссылочного типа).
#include
using namespace std;
double &change_it(int i);
// Функция возвращает ссылку.
double vals[] = {1.1, 2.2, 3.3, 4.4, 5.5};
int main()
{
int i;
cout << "Вот исходные значения: ";
for(i=0; i<5; i++)
cout << vals[i] << ' ';
cout << '\n';
change_it(1) = 5298.23; // Изменяем 2-й элемент.
change_it(3) = -98.8; // Изменяем 4-й элемент.
cout << "Вот измененные значения: ";
for(i=0; i<5; i++)
cout << vals[i] << ' ';
cout << '\n';
return 0;
}
double &change_it(int i)
{
return vals[i]; // Возвращаем ссылку на i-й элемент.
}
Эта программа изменяет значения второго и четвертого элементов массива
Вот исходные значения: 1.1 2.2 3.3 4.4 5.5
Вот измененные значения: 1.1 5298.23 3.3 -98.8 5.5