    36:
    37:	double &ref(int index) 
    38:	{ 
    39:	  if ((index < 0) | | (index >= SIZE)) 
    40:	    index = 0; 
    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 << "[" «!«"]=	= " « 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(). 

    Резюме 

    •   Язык C++ — нечто большее, чем объектно-ориентированная версия языка С. 
C++ имеет много возможностей, улучшающих и расширяющих С. Многое из того, что 
вы узнали о ANSI С, применимо и к C++, и большинство программ, написанных на 
ANSI С, совместимы с C++. Конечно, самые передовые возможности C++ не 
поддерживаются в ANSI С. 
    •   При компиляции файлов, содержащих исходные тексты программ, расширение 
.СРР указывает Borland C++, что эти программы написаны на языке C++. 
Расширение заголовочных файлов в данном случае не имеет значения, хотя 
некоторые программисты, пишущие на C++, предпочитают называть свои 
заголовочные файлы с расширением .НРР. В этой книге используются .Н. 
    •   C++ распознает все ключевые слова, операторы и другие элементы языка 
ANSI С. В C++ также имеется несколько новых ключевых слов и операторов в 
дополнение к ANSI С. 
    •   В C++ необходимо указывать прототипы всех функций. Прототип функции 
должен предшествовать ее вызову. 
    •   Язык C++ имеет следующие особенности: проверка типов осуществляется 
более строго, сильно ослаблена потребность в typedef-объявлениях, определение 
char означает выделение 8-битового байта. В C++ такие литеральные символы, как 
'X', имеют тип char. В ANSI С литеральные константы имеют тип int. 
    •   Символ комментария // следует использовать в C++ для того, чтобы 
начать комментарий, продолжающийся до конца строки. Комментарии C++ и ANSI С 
(скобки /* и */) могут использоваться вперемежку в одной программе. 
Комментарии C++ могут быть вложены внутрь комментариев ANSI С. 
    
    
    302	Часть III. Программирование на ANSI C++ 
