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

// Эта функция НЕ принадлежит пространству имен Test

void InterestingFunc()

(

cout « "Поехали..-\n";

\

/I Здесь пространство расширяется

namespace Test

(

void JustAnotherFunc() { cout « "На старт!\n"; } }

void main() (

Test::JustAnotherFunc() ;

Test::JustAFunc() ;

InterestingFunc ();

}

Можно было бы предположить, что такая программа не будет компилироваться из-за двойного объявления пространства Test. Этого, однако, не происходит. Хотя в программе и присутствуют два объявления Test, в действительности это одно определение. Чтобы убедиться в этом, изменим расширение пространства Test следующим образом:

// Здесь пространство расширяется

namespace Test

(

void JustAFunc(){ cout « "Отбой...\n";}

void JustAnotherFunc() { cout « "На старт!\n"; } }

В этом случае компилятор выдаст следующее сообщение об ошибке: Body has already been defined for function Test:: JustAFunc (). (Тело функции Test:: JustAFunc () уже определено). Этот пример поднимает сразу несколько вопросов. Если пространство может быть разбито на несколько объявлений, будет ли при этом поддерживаться перегрузка функций? Да, будет, и листинг 24.9 демонстрирует такую возможность на примере перегрузки функции JustAFunc().

h06811.jpg

ftinclude <iostream.h>

// Первоначальное объявление пространства имен

namespace Test '

{

void JustAFunc() { cout « " Предупреждение!\п"; } }