Пространство имен. Ключевое слово using как директива
Предположим, у нас есть проект, который разрабатывают несколько человек. Если у двух из них имеется глобальная переменная с одним и тем же именем, будет конфликт имен при сборке проекта. Раньше, до изобретения пространств имен, эта проблема решалась следующим образом: каждому из разработчиков назначался свой префикс, и все его имена должны были начинаться с него. Теперь каждый из разработчиков может иметь свое пространство имен, в котором содержатся все его глобальные константы и переменные, классы, функции. И если у двух из них есть переменная с одним и тем же именем, конфликта не возникает, поскольку эти переменные лежат в разных пространствах имен. Определение пространства имен выглядит следующим образом: namespace имя
В одном и том же файле может встречаться несколько определений одного и того же пространства имен — все они объединяются вместе. После определения пространства имен, для ссылки на любое содержащееся в нем имя, нужно поставить перед ним имя пространства имен и операцию разрешения области видимости. Например, если у нас есть пространство имен myspace и в нем функция myfunc, то для вызова этой функции в качестве имени надо написать myspace::myfunc. Если мне нужно конкретное имя из определенного пространства имен, и оно часто используется в моей части про- граммы, то, чтобы не писать имя пространства имен, можно воспользоваться конструкцией using имя_пространства_имен::нужное_имя;. После этого указанным именем можно пользоваться непосредственно, без указания пространства имен. Если мне нужны многие имена из какого-либо пространства, можно аналогичным образом импортировать это пространство имен целиком, написав using namespace имя;. Так что фраза using namespace std; означает ничто иное, как импорт всего пространства имен std. Это пространство имен содержит все имена из стандартной библиотеки языка C++. Можно не только импортировать отдельные имена или пространства имен в свою часть программы, но также и в другие пространства имен. Для этого директива using должна встречаться в теле определения того пространства имен, куда осуществляется импорт. Таким образом можно создавать новые пространства имен из уже существующих, включая в новые пространства имен нужные имена из разных пространств имен. Каждую программу на языке С++ можно разбить на несколько так называемых пространств имен. Пространством имен называется область программы, в которой распознается определенная совокупность имен. Эти имена за пределами данного пространства имен. Директива using namespace std; означает, что все определенные ниже имена в программе будут относиться к пространству имен с именем std. Различные элементы программы описаны с использованием пространства имен std, например переменная cout. Если не использовать директиву using, то к этим элементам программы придется каждый раз добавлять имя std: std::cout << «У каждой эпохи свой язык»\n; Для того что бы не дописывать std:: каждый раз перед именем переменной, используется директива using. Процессор и имена заголовочных файлов Заголовочный файлили подключаемый файл— в языках программирования файл, содержимое которого автоматически добавляется препроцессором в исходный текст в том месте, где располагается некоторая директива В языках программирования Си и C++, заголовочные файлы — основной способ подключить к программе типы данных, структуры, прототипы функций, перечислимые типы, и макросы, используемые в другом модуле. Имеет по умолчанию расширение .h; иногда для заголовочных файлов языка C++ используют расширение .hpp. Препроцессор— это компьютерная программа, принимающая данные на входе и выдающая данные, предназначенные для входа другой программы (например, компилятора). О данных на выходе препроцессораговорят, что они находятся в препроцессированной форме, пригодной для обработки последующими программами (компилятор). Препроцессор С/С++ — программа, подготавливающая код программы на языке C/C++ к компиляции. Препроцессором выполняются следующие действия: ·замена соответствующих диграфов и триграфов на эквивалентные символы «#» и «\»; ·удаление экранированных символов перевода строки; ·замена строчных и блочных комментариев пустыми строками (с удалением окружающих пробелов и символов табуляции); ·вставка (включение) содержимого произвольного файла (#include); ·макроподстановки (#define); ·условная компиляция (#if, #ifdef, #elif, #else, #endif); ·вывод сообщений (#warning, #error). Условная компиляция позволяет выбрать код для компиляции в зависимости от: ·модели процессора (платформы); ·разрядности адресов; ·размерности типов; ·наличия/отсутствия поддержки расширений языка; ·наличия/отсутствия библиотек и/или функций; ·особенностей поведения конкретных функций; ·и другого.
Популярное: Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1957)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |