Пространства имен в языке C++
428 |
Глава 15. Абстрактные типы данных |
есть опасения, что некоторый другой библиотечный файл может заимствовать имя, которое уже используется в АТД стека, то файл, определяющий стек, можно поместить в собственное пространство имен. Достаточно разместить все объявления для стека в блоке пространства имен: namespace theStackSpace { // Объявления стека } Файл реализации для АТД стека может ссылаться на имена, объявленные в заголовочном файле с помощью операции разрешения области видимости :: (двойное двоеточие), как показано в следующем примере: theStackSpace::tos Файл реализации тоже можно поместить в блок пространства имен, идентичный тому, что использовался для заголовочного файла. В этом случае все имена из заголовочного файла будут доступны (видимы) непосредственно. Безусловно, такой прием упрощает обращение, но в ущерб читабельности, поскольку становится менее очевидно, где именно объявлено цитируемое имя.Программа клиента может получить доступ к именам из пространства имен библиотечного заголовочного файла тремя способами. Во-первых, имена из библиотеки квалифицируются именем пространства имен. Например, для ссылки на переменную tos надо записать: theStackSpace::tos Это самый точный и ясный способ ссылки, скажем, из файла реализации. Два других способа используют директиву using. Эта директива может применяться для квалификации отдельных имен из пространства имен, например, так: using theStackSpace::tos; Такое предложение делает видимым только имя tos, но не другие имена из пространства имен theStackSpace. Директива using может использоваться и для квалификации всех имен из пространства, как в следующем примере: using namespace theStackSpace; Фрагмент, который включает эту директиву, получает непосредственный доступ к именам из пространства имен, в следующем стиле: х = tos; В общем случае, при создании пространств имен в C++ используют и более изощренные правила, мы обсудили лишь основы. Пространства имен языка C# используют те же механизмы и средства. |