б 78________________________________Часть IV. Новые возможности С++

Как легко видеть, это код листинга 24.5, за исключением того, что каждое объявление из пространства simple сопровождается уточняющим префиксом Simple::.

Вложенные пространства имен

Пространства имен — действительно глобальные конструкции. Их нельзя объявить внутри тел функций, шаблонов, классов и т. п. Однако их можно вкладывать друг в друга. Вложенные пространства имен подчиняются обычным правилам видимости для C++: они имеют доступ ко всем определениям и объявлениям, сделанным в пространствах-родителях. Родительские пространства не имеют доступа к определениям своих детей. Фрагмент кода из листинга 24.7 иллюстрирует эти принципы."

h06781.jpg

ttinclude <iostream.h>

namespace Outer {

long Dog = 123;

long Cat = 456;

namespace Inner (

long Lizard = Dog;

// Или как вариант

// long Cat = Outer::Dog;

// Сокрытие Cat из Outer long Cat = 789;

// Выведем их всех по порядку

void AFunc()

(

cout « "Cat: " « Cat « "\n"; // Это Inner::Cat cout « "Inner Cat: " « Inner::Cat « "\n";

cout « "Outer Cat: " « Outer::Cat « "\n";

} } )

void main() {

// Ошибка — AFunc() недоступна в Outer

// Outer::AFunc() ;

// Ошибка — Inner недоступна в main() // Inner::AFunc();