Область видимости и объявление переменных
Например, если существует глобальная переменная int count, функция может объявить локальную переменную с тем же именем, не вызвав при этом сообщения компилятора об ошибке: Int count; // Глобальная переменная Void AnyFunction() {int count; // Локальная переменная } Область видимости локальной переменной count действует в пределах объявленной функции. В этой функций локальная переменная countделает невозможным доступ к глобальной переменной с тем же именем. Для решения этой проблемы в С++ можно использовать оператор разрешения области видимости ::.
Перепишем приведенную выше функцию следующим образом:
int count; //Глобальная переменная void AnyFunction(){ int count; //Локальная переменная count = 1234; // Присвоить значение локальной переменной ::count = 4321; // Присвоить значение глобальной переменной count }
Теперь она присваивает значение 1234 локальной переменной count и 4321 — глобальной. Выражение ::count указывает С++, что используется внешняя переменная count, а не локальная (рис. 1.1).
Рис. 1.1. Оператор разрешения области видимости может открытьдоступ кскрытой глобальной переменной Листинг 1.8 демонстрирует использование оператора разрешения видимости С++. Этот листинг дополнительно иллюстрирует еще одно свойство С++: объявления С++ можно вводить в любой точке программы, а не только глобально или в начале функции, как в С. Конечно, как и в C, вы должны объявлять переменные до их использования. Листинг 1.8. SCOPE.CPP (использование оператора разрешения видимости) 1: #include <iostream.h> 2: 3: int k = 100; // Глобальная переменная 4: main() 5: { 6: int i = 200; // Локальная переменная 7: 8: cout << "Global k == " << k << \n"; 9: cout << "Local i == " << i << '\n'; 10: 11: { 12: int к = 300; 13: cout <<Local к *= " << k << '\n'; 14: cout « "Global k == " << ::k << '\n'; 15: } 16: return 0; 17: } В строке 3 объявляется и инициализируется значением 100 глобальная переменная k; а в строке 7 объявляется переменная i, локальная в функции main(). Строки 9-10 выводят значения k и i. Нет необходимости использовать оператор разрешения видимости в строке 9, так как была объявлена только одна переменная k. Строки 11-15 содержат новый блок-оператор, заключенный внутри функции main(). Хотя это и необычно для практики программирования, блок может быть размещен в другом блоке (строки 11 и 15). Конечно, на практике подобные вложенные блоки принадлежат операторам if, while и им подобным. Внутри вложенного блока в строке 12 объявляется новая переменная с именем k, инициализированная значением 300.
В отличие от С, С++ позволяет объявлять и инициализировать переменные в любом месте блока-оператора.
Теперь мы имеем две переменных k: глобальную, объявленную в строке 3, и локальную, объявленную в строке 12. Поскольку новая локальная k скрывает глобальную переменную с тем же именем, в строке 13 отображается значение локальной переменной. Чтобы получить доступ к глобальной переменной, используется оператор разрешения области видимости, как показано в строке 14.
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.
|