|
Программирование >> Дополнительные возможности наследования
. . , return О ; > ; файл second.срр int integerValue = О конец second.срр примечание Обратите внимание на использование оператора видимости (: ), который необходим для указания глобальности переменной integerValue в том случае, если в функции была объявлена переменная с таким же именем. Проблема с двумя глобальными переменными, объявленными за пределами какой-либо функции, заключается в том, что они имеют одинаковые имена и перекрывающиеся области видимости и это вызывает ощибку в работе компоновщика. Под видимостью объекта, который может быть переменной, классом или функцией, понимают ту часть программы, в которой данный объект может использоваться. Например, переменная, объявленная и определенная за пределами всякой функции, имеет файловую, или глoбaJ1ьнyю область видимости. Ее видимость распространяется от точки объявления до конца файла. Переменная, имеющая модульную, или локальную область видимости, объявляется внутри программного модуля. Чаще всего локальные переменные объявляются в теле функции. Ниже показаны примеры объектов с различными областями видимости: int globalScopeInt = 5 ; void f( ) int localScopeInt = 10 ; int main( ) { int localScopeInt = 15 ; { int anothertocal = 20 : int localScopeInt = 30 ; return 0 : Первая целочисленная переменная GlobalScopeInt будет видна как внутри функции f(), так и main(). В теле функции f() содержится объявление переменной localScopeInt. Ее область видимости локальна, т.е. ограничивается пределами модуля, содержащего объявление функции. Функция mainO не может получить доступ к переменной localScopeInt функции f(). Как только завершается выполнение функции f(), переменная localScopeInt удаляется из памяти компьютера. Объявление третьей переменной, также названной localScopeInt, располагается в теле функции main(). Область ее видимости также локальна. Обратите внимание: переменная localScopeInt функции main() не конфликтует с одноименной переменной функции f(). Видимость следующих двух переменных - anotherLocal и localScopeInt - также ограничена областью модуля. Другими словами, эти переменные видны от места объявления до закрывающей фигурной скобки, ограничивающей тело модуля, в котором эта функция была объявлена. Вы, наверное, обратили внимание, что в профамме объявляются две одноименные локальные переменные localScopeInt, причем одна из них объявляется во внешнем модуле, а вторая - во вложенном. Таким образом, их области видимости перекрываются. Переменная, объявленная во внутреннем модуле, будет скрывать в нем переменную внешнего модуля. После закрытия фигурной скобки внутреннего модуля вторая переменная localScopeInt из внешнего модуля вновь становится видимой. Все изменения, внесенные в localScopeInt внутри фигурных скобок, никоим образом не повлияют на значение внешней переменной localScopeInt. Имена могут иметь внутреннюю или внешнюю связь. Оба эти термина относятся к использованию или доступности имени в нескольких или одной программной единице. На всякое имеющее внешнюю связь имя можно ссылать только в пределах определяющей его единицы. Например, переменная, имеющая внутреннюю связь, может использоваться функциями только внутри блока программы, где эта переменная была объявлена. Имена с внешними связями доступны функциям из других блоков. Примеры внутренних и внешних связей иллюстрирует приведенный ниже код. файл: first.срр int externalint = 5 ; const int ] = 10 ; int mainO { return 0 ; файл: second,cpp extern int externalint ; int anExternallnt = 10 ; const int j = 10 ; Переменная externalint, объявленная в файле first.срр, имеет внешнюю связь. Несмотря на то что она объявлена в файле first, срр, доступ к этой переменной можно получить и из файла second, срр. В обоих файлах также есть константы j, которые по умолчанию имеют внутренние связи. Чтобы изменить заданную по умолчанию внутреннюю связь констант, необходимо явно указать их глобальность, как это сделано в следующем примере: файл; first.срр extern const int j = 10 ; файл; second.срр extern const int j ; ftinclude <iostrean> int main() std;:cout j = return 0 ; Обратите внимание на использование обошачсния пространства имени std перед oout, что позволяет ссылаться на все объекты сгандартиий библиотеки ANSI. После выполнения этого кода на экране появится строка; J = 10 Комитет по стандартизации не рекомендует использовать static для офаничения области видимости внешней переменной, как н следующем примере: statle Int statlcint - 10 ; int malnO Если сейчас такое использование static просто не рекомендуется, то в будущем подобное выражение вообще может рассмтриначися как ошибочное. Поэтому уже сейчас вместо static лучше использовагь пространства имен, Рекомендуется Нв рекомендуется Используйте пространства имен. Не применяйте ключевое слово static для ограничения области видимости переменной пределами файла. Создание прпстрансшва имени Синтаксис объявления пространства имен аналогичен синтаксису объявления структур и классов. После ключевого слова namespace стоит имя пространства имен, которое может и отсутствовать, а затем следует открывающая фигурная скобка. Пространство имен завершается закрывающей фигурной скобкой без точки с запятой в конце выражения. Например: namespace Window { void move( int x, Jnt y) ; Имя Window идентифицирует пространство имен. Можно создавать множество экземпляров именованных пространств имен, расположенных внутри одного файла или в разных единицах трансляции. Примером тому может быть пространство имен std стандартной библиотеки С++. Его использование обосновано в данном случае тем, что стандартная библиотека представляет собой логически единую группу функций.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |