Глава 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().
ftinclude <iostream.h>
// Первоначальное объявление пространства имен
namespace Test '
{
void JustAFunc() { cout « " Предупреждение!\п"; } }