Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 Возвращение значения по ссылке - ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн - Studbook
Главная->Інформатика та програмування->Содержание->Возвращение значения по ссылке

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн

Возвращение значения по ссылке

Теперь, когда мы рассмотрели глобальные переменные, мы можем перейти к рас- смотрению еще одного аспекта программирования на C++, который, возможно, покажется несколько нестандартным. Подобно тому как мы передавали в функ- цию аргументы с помощью ссылок, мы можем возвращать значение функции по ссылке. Причины для использования ссылочного механизма при возвращении значения функцией пока в основном будут вам не совсем понятны. Одной из причин, как мы увидим в главе 11 «Виртуальные функции», является необходи- мость избежать копирования объектов большого размера. Другой причиной явля-

ется открывающаяся возможность использовать вызов функции в качестве лево- го операнда операции присваивания. Чтобы не тратить время на малопонятные словесные манипуляции, приведем пример программы RETREF, иллюстрирующей данный механизм в действии:

// retref.cpp

// возвращение значения по ссылке #include <iostream> using namespace std;

int x;      // глобальная переменная

int& setx();        // прототип функции

int main()

{              // присваивание значения x при

setx() = 92;         // помощи вызова функции слева

cout << "x=" << x << endl;// вывод нового значения x return 0;

}

//--------------------------------------------------------

int& setx() {

   return x;           // возвращает значение, которое будет изменено

}

В этой программе функция setx(), согласно своему прототипу, имеет тип воз- вращаемого значения int&:

int& setx();

Внутри функции содержится оператор

return x;

где переменная x была определена как глобальная. Теперь у вас появляется на первый взгляд странная возможность располагать вызов функции слева от знака равенства в операции присваивания:

setx() = 92;

В результате переменной, возвращаемой функцией, присваивается значение, стоящее справа от знака равенства. Таким образом, оператор, приведенный вы- ше, присваивает переменной x значение, равное 92. Это подтверждается и ре- зультатом работы программы на экране:

Х=92

 

33