На этом шаге мы рассмотрим назначение, создание и особенности использования пространства имен.
Многие серьезные приложения состоят из нескольких программных файлов (с исходным текстом программ), которые создаются и обслуживаются отельными группами программистов. И только после этого все файлы собираются в общий проект. Но как быть с тем фактом, что в таких файлах могут быть одинаково объявлены некоторые разные переменные? В C++ это неудобство разрешается с помощью так называемых пространств имен, которые вводятся в каждый составляющий единый проект текстовый программный файл с помощью директивы:
namespace <имя пространства имен (идентификатор)>
{в эти скобки заключается весь программный текст}
Когда идет сборка общего проекта, то в итоговом тексте пишут директиву:
using namespace идентификатор пространства имен;
Это обеспечивает в итоговом проекте доступ к переменным файла с данным пространством имен. При использовании поточных классов языка C++ в основной программе требуется писать директиву:
using namespace std;
В противном случае программа не пройдет компиляцию.
Ниже приведен пример использования директив пространства имен, результат работы программы показан на рисунке 1.
// 89_1.cpp: главный файл проекта. #include "stdafx.h" #include <iostream> #include <conio.h> using namespace System; namespace F { float x = 9; } namespace G { using namespace F; //здесь само пространство G //использует пространство F и //в нем же объявляется еще //одно пространство: INNER_G float y = 2.0; namespace INNER_G { float z = 10.01; } } // G void main() { using namespace G; //эта директива позволяет пользоваться //всем, объявленным в "G" using namespace G::INNER_G; //эта директива позволяет //пользоваться только тем, //что объявлено в "INNER_G" float x = 19.1; //локальное объявление переопределяет //предыдущее std::cout << "x = " << x <<std::endl; std::cout << "y = " << y <<std::endl; // у берется из пространства F std::cout << "z = " << z <<std::endl; // у берется из пространства INNER_G _getch(); }
Рис.1. Результат работы приложения
Обратите внимание: чтобы воспользоваться содержимым пространства имен INNER_G недостаточно подключить пространство имен G; нужно отдельной строкой прописать подключение пространства имен INNER_G!
std::cout - это стандартный вывод. Его мы рассмотрим чуть позже. Здесь cказано, что объект cout принадлежит пространству имен std.
Мы могли бы в основной программе записать:
using namespace std;
Тогда бы вместо std::cout можно было бы писать просто cout.
Итак, при составлении программы с использованием поточных файлов в начале основной программы следует записать директиву:
using namespace std;
На следующем шаге мы рассмотрим работу с классом fstream.