Введение
В этой части серии статей о программировании на C++ мы будем изучать области видимости и то, как C++ определяет видимость и доступность идентификаторов в программе. Понимание областей видимости имеет решающее значение для написания чистого и организованного кода.
В этой части нашего путешествия по программированию на C++ мы рассмотрим следующие темы:
- Местный охват
- Глобальный охват
- Приоритет имени
Прежде чем мы начнем, важно отметить, что эта серия статей предполагает базовое понимание концепций программирования. Если вы новичок в программировании, может быть полезно сначала изучить основы.
Категории области
В C++ есть две основные категории области видимости:
Местный охват
Локальная область относится к диапазону доступности идентификатора, объявленного внутри блока. Он начинается с точки объявления и продолжается до конца этого блока.
Блок может быть:
- Тело функции
- Петля
- Любой заключенный набор операторов в фигурных скобках.
Идентификаторы с локальной областью действия доступны только в пределах блока, в котором они определены. После завершения блока идентификаторы больше не доступны.
Пример локальной области действия
Рассмотрим следующий фрагмент кода:
int x; while (x < 0) { int y; cin >> y; x = x + y; }
В этом примере переменная y объявляется внутри цикла while. Следовательно, его область действия локальна по отношению к телу цикла. Это означает, что на y можно ссылаться только внутри цикла, и он перестанет существовать после завершения цикла.
Глобальный охват
Область действия идентификатора, объявленного вне всех блоков, простирается от точки объявления до конца всего файла. Доступ к идентификаторам с глобальной областью действия можно получить из любой части программы ниже их объявления, включая внутренние функции и другие блоки. Это работает очень похоже на Python.
Пример глобального охвата
Рассмотрим следующий фрагмент кода:
double d; int main() { int y = 0; cin >> d; if (d < 0) { d = y; } }
В этом случае идентификатор d объявлен вне каких-либо блоков, что дает ему глобальную область действия. На него можно ссылаться в любом месте программы после его объявления, в том числе внутри функции main и тела оператора if.
Приоритет имени
Когда внутренний блок объявляет локальный идентификатор с тем же именем, что и идентификатор во внешнем блоке, внутренний идентификатор имеет приоритет. Это означает, что внутренний идентификатор «скрывает» или «затеняет» внешний, делая его недоступным внутри внутреннего блока. Например:
double d = 1.2; int main() { double d = 3.5; cout << d; // Output: 3.5 }
В этом случае внутренняя переменная d, объявленная в main, имеет приоритет над внешней переменной d. Следовательно, при печати d отображается значение внутреннего d.
Понимание приоритета имен жизненно важно, чтобы избежать путаницы и обеспечить правильный доступ к предполагаемым идентификаторам в коде.
Подведение итогов
В этой части нашей серии статей по программированию на C++ мы углубились в важную тему областей видимости. Области определяют видимость и доступность идентификаторов в программе, обеспечивая организованный и бесконфликтный код. Давайте подытожим то, что мы обсуждали:
- Локальная область действия. Мы выяснили, как идентификаторы, объявленные внутри блока, такие как тело функции или цикл, имеют ограниченную область действия.
- Глобальная область действия. Доступ к идентификаторам с глобальной областью действия можно получить из любой части программы ниже их объявления, что обеспечивает удобство, но также вызывает опасения относительно сокрытия и инкапсуляции информации.
- Приоритет имени: мы узнали, что внутренний идентификатор имеет приоритет над внешним, что приводит к потенциальным конфликтам и необходимости тщательного управления для обеспечения правильного доступа к предполагаемым идентификаторам.