Глава 24. Пространства имен____________________________________677

димости для огромного набора объявлений программы. Заметьте, что, хотя единая область видимости затрагивает главным образом объявления глобальных переменных, основные проблемы могут лежать гораздо глубже (см. листинг 24.1).

h06711.jpg

ttinclude <iostream.h> #include <cstring.h>

class Dog

{

public:

string Bark() const

(

cout « "Woof! Woof!

} );

class Dog

{

public:

string Bark() const

{

cout « "Bow Wow!";

} t;

void main()

{

Dog Rover;

Rover.Bark() ;

>

Очевидно, что любой нормальный компилятор немедленно диагностирует ошибку двойного объявления класса Dog. А любой нормальный программист никогда не напишет кода, подобного этому. Тогда для чего же приводить такой пример?

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

Но как быть, если конфликт имен возникает из-за наличия одинакового имени где-нибудь внутри библиотеки классов, которую вы купили для ис-