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

Перегрузка — полезное и важное средство C++. Поскольку компилятор умеет различать определения функций с одинаковыми именами на основе свойств передаваемых параметров, конфликты имен оказываются допустимыми. В предыдущем примере обе версии Add () выполняют одинаковую операцию над двумя основными типами данных. Нет необходимости писать различные функции AddLong () и Addstring (), достаточно оказывается иметь одну функцию, но для разных типов данных.

Замечание

1 Стоит заметить, что в предыдущем примере, вероятно, лучшим вариантом было бы использование шаблона вместо перегрузки функций. Детальное рассмотрение шаблонов дается в главе 19.

Простой пример пространства имен

Использование пространств имен позволяет решить некоторые из проблем, которые рассматривались в предыдущих разделах. Это сделано за счет разбиения сложных систем на отдельные единицы, каждая из которых составлена из набора поименованных областей. Но пространство имен — это нечто большее, чем просто снабженная именем группа определений, существующих на одном уровне видимости.

Имеется по крайней мере два шага, которые необходимо выполнить, чтобы воспользоваться возможностями пространства имен. Во-первых, нужно объявить, что будет помещено в это пространство, а во-вторых, в тексте программы следует указать объекты данного пространства имен.

Объявление пространства имен несложно и осуществляется подобно определению нового блока в листинге 24.2. Для определения пространства имен используется ключевое слово namespace с некоторым необязательным именем, за которым следует область, ограниченная фигурными скобками. В общем случае оно имеет следующую форму:

namespace [необязательное имя] {

Здесь располагаются определения и объявления

Каждому пространству может быть присвоено имя. Все пространства имен внутри одной программы должны иметь уникальные имена. (Следует внимательно изучить раздел "Расширение пространств имен" далее в этой главе). Никакие другие символы (классы, переменные и т. д.) не могут носить то же самое имя, что и пространство имен. Разумеется, эти правила в свою очередь могут быть источником другого конфликта имен, но ничего абсолютно совершенного не бывает.

В пространство можно поместить все, что обычно помещают на один уровень области видимости. Это может быть что угодно: объявления и опреде-

22*