672 ______ _________________Часть IV. Новые возможности C++
пользования в вашем проекте? Если библиотека поставляется без исходных текстов, а только с заголовочными файлами, вы окажетесь в очень затруднительной ситуации. В действительности перед вами встанет та же проблема, что и при планировании злополучного банкета.
Существует множество возможностей для решения этой проблемы и без введения пространств имен. Можно обезопасить себя, снабжая все свои определения уникальным префиксом, например, инициалами автора или названием фирмы. Понятно, что достаточно мало шансов, что кто-то независимо от вас тоже определит класс с именем ErnieFinkelbaumDog или даже EFDog. Но все-таки такое решение выглядит не слишком элегантно и требует некоторых достаточно произвольных дополнительных соглашений.
Конфликты имен II: сокрытие переменных
В C++ каждый символ существует внутри некоторой, четко определенной области видимости (scope). Практически это означает, что программа имеет доступ к определенному набору символов. Находясь вне области видимости, невозможно обращаться к переменным, принадлежащим этой области; попытка такого обращения вызовет ошибку во время компиляции программы.
Области видимости могут определяться весьма различными способами — путем создания нового класса, с помощью механизма наследования, вызова функции или метода и т. д. Для иллюстрации рассмотрим простейший способ организации такой области — создание простого блока кода с помощью фигурных скобок. Посмотрим на листинг 24.2. Что происходит с переменной Dog? Попробуйте определить результат работы данного кода.
ftinclude <iostream.h>
void main() {
long Dog = 123;
// Эти скобки ограничивают новую область видимости,
// назовем ее А
(
long Cat = 456;
cout « "\nB первой области:\n";
cout « "Dog равна " « Dog « "\n";
cout « "Cat равна " « Cat « "\n";
)
// Cat сейчас вне области. Следующая•строка некорректна // cout « "Cat равна " « Cat « "\п";