672 ______ _________________Часть IV. Новые возможности C++

пользования в вашем проекте? Если библиотека поставляется без исходных текстов, а только с заголовочными файлами, вы окажетесь в очень затруднительной ситуации. В действительности перед вами встанет та же проблема, что и при планировании злополучного банкета.

Существует множество возможностей для решения этой проблемы и без введения пространств имен. Можно обезопасить себя, снабжая все свои определения уникальным префиксом, например, инициалами автора или названием фирмы. Понятно, что достаточно мало шансов, что кто-то независимо от вас тоже определит класс с именем ErnieFinkelbaumDog или даже EFDog. Но все-таки такое решение выглядит не слишком элегантно и требует некоторых достаточно произвольных дополнительных соглашений.

Конфликты имен II: сокрытие переменных

В C++ каждый символ существует внутри некоторой, четко определенной области видимости (scope). Практически это означает, что программа имеет доступ к определенному набору символов. Находясь вне области видимости, невозможно обращаться к переменным, принадлежащим этой области; попытка такого обращения вызовет ошибку во время компиляции программы.

Области видимости могут определяться весьма различными способами — путем создания нового класса, с помощью механизма наследования, вызова функции или метода и т. д. Для иллюстрации рассмотрим простейший способ организации такой области — создание простого блока кода с помощью фигурных скобок. Посмотрим на листинг 24.2. Что происходит с переменной Dog? Попробуйте определить результат работы данного кода.

h06721.jpg

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 « "\п";