Глава 24. Пространства имен__________________________________675
Перегрузка — полезное и важное средство C++. Поскольку компилятор умеет различать определения функций с одинаковыми именами на основе свойств передаваемых параметров, конфликты имен оказываются допустимыми. В предыдущем примере обе версии Add () выполняют одинаковую операцию над двумя основными типами данных. Нет необходимости писать различные функции AddLong () и Addstring (), достаточно оказывается иметь одну функцию, но для разных типов данных.
Замечание
1 Стоит заметить, что в предыдущем примере, вероятно, лучшим вариантом было бы использование шаблона вместо перегрузки функций. Детальное рассмотрение шаблонов дается в главе 19.
Простой пример пространства имен
Использование пространств имен позволяет решить некоторые из проблем, которые рассматривались в предыдущих разделах. Это сделано за счет разбиения сложных систем на отдельные единицы, каждая из которых составлена из набора поименованных областей. Но пространство имен — это нечто большее, чем просто снабженная именем группа определений, существующих на одном уровне видимости.
Имеется по крайней мере два шага, которые необходимо выполнить, чтобы воспользоваться возможностями пространства имен. Во-первых, нужно объявить, что будет помещено в это пространство, а во-вторых, в тексте программы следует указать объекты данного пространства имен.
Объявление пространства имен несложно и осуществляется подобно определению нового блока в листинге 24.2. Для определения пространства имен используется ключевое слово namespace с некоторым необязательным именем, за которым следует область, ограниченная фигурными скобками. В общем случае оно имеет следующую форму:
namespace [необязательное имя] {
Здесь располагаются определения и объявления
Каждому пространству может быть присвоено имя. Все пространства имен внутри одной программы должны иметь уникальные имена. (Следует внимательно изучить раздел "Расширение пространств имен" далее в этой главе). Никакие другие символы (классы, переменные и т. д.) не могут носить то же самое имя, что и пространство имен. Разумеется, эти правила в свою очередь могут быть источником другого конфликта имен, но ничего абсолютно совершенного не бывает.
В пространство можно поместить все, что обычно помещают на один уровень области видимости. Это может быть что угодно: объявления и опреде-
22*