Другие классы попадают в категорию «типа ссылок», в частности
Глобальные переменные и функции
С++ позволяет объявлять функции и переменные, которые не принадлежат никакому классу и к которым можно обращаться из любой другой функции. Мы видели несколько примеров глобальных функций, в частности
Для иллюстрации работы глобальных функций и переменных рассмотрим небольшую программу, которая печатает список из 128 псевдослучайных чисел, используя придуманный на скорую руку алгоритм. Исходный код программы находится в двух файлах
Первый исходный файл —
01 int randomNumbers[128];
02 static int seed = 42;
03 static int nextRandomNumber()
04 {
05 seed = 1009 + (seed * 2011);
06 return seed;
07 }
08 void populateRandomArray()
09 {
10 for (int i = 0; i < 128; ++i)
11 randomNumbers[i] = nextRandomNumber();
12 }
В этом файле объявляются две глобальные переменные
Статическая компоновка идеально подходит для вспомогательных функций и внутренних переменных, которые не должны использоваться в других единицах компиляции. Она снижает риск «столкновения» идентификаторов (наличия глобальных переменных с одинаковым именем или глобальных функций с одинаковой сигнатурой в разных единицах компиляции) и не позволяет злонамеренным или другим опрометчивым пользователям получать доступ к внутренним объектам единицы компиляции.
Теперь рассмотрим второй файл
01 #include
02 using namespace std;
03 extern int randomNumbers[128];
04 void populateRandomArray();
05 int main()
06 {
07 populateRandomArray();
08 for (int i = 0; i < 128; ++i)
09 cout << randomNumbers[i] << endl;
10 return 0;
11 }
Мы объявляем внешние переменные и функции до их вызова. Объявление
Функция
Обычно объявления внешних переменных и функций помещают в заголовочный файл и включают его во все файлы, где они требуются:
01 #ifndef RANDOM_H
02 #define RANDOM_H
03 extern int randomNumbers[128];
04 void populateRandomArray();
05 #endif