41: Return array[index]; // Вернуть ссылку на элемент массива
42: }
43:
44: void ShowArray(void)
45: {
46: cout << "\nArray:\n";
47: for (int i = 0; i < SIZE; i++)
48: cout << "[" << i << "] == " << array[i] << '\n';
49: }
Г лобальный массив вещественных значений двойной точности объявляется в строке 13. В больших по размерам программах он может находиться в отдельном модуле. Хотя программа отображает значения и вставляет их в этот массив, это происходит без непосредственных ссылок на глобальную структуру данных в функции main(). Благодаря ссылочным функциям можно изменить внутреннее содержимое вещественных значений двойной точности (возможно, используя связный список вместо массива), и программа останется рабочей без малейших изменений в функции main()..
В строке 10 объявляется ссылочная функция с именем ref(). Она возвращает ссылку на вещественный объект двойной точности, идентифицированный целочисленным параметром-индексом. Поскольку функция возвращает ссылку на вещественный объект двойной точности, имя функции может оказаться слева от оператора присваивания, как показано в строке 21. Вероятно, это самое частое употребление ссылочных функций. Оператор в строке 21 присваивает значение вещественному объекту двойной точности, на который ссылается ref(index). Конкретное внутреннее представление этого объекта несущественно. Ссылочная функция скрывает внутреннее представление данных.
В строке 31 приводится еще один способ использования ссылочных функций. Вещественный результат двойной точности из функции atof() присваивается функции ref(index). Если ref — массив, этот оператор может быть написан так:
ref[index] = atof(buffer);
Изменения в механизме хранения данных потребуют соответствующих изменений в коде, которые, в свою очередь, потребуют дополнительных проверок, отладки и т.д. Ссылочные функции могут облегчить подобные нежелательные изменения.
Ссылочная функция приводится в строках 37-42. Оператор if обеспечивает значения индекса в области допустимых значений, после чего оператор return в строке 41 возвращает ссылку на одно из вещественных значений двойной точности в глобальном массиве. Важно разобраться, что в строке 41 не возвращается вещественное значение двойной точности. Возвращается ссылка на объект этого типа. Если бы ref() возвращала вещественное значение двойной точности, то она не могла бы использоваться в левой части оператора присваивания, как это произошло в main().