- •6 Глава 1
- •12 Глава 1
- •14 Глава 1
- •16 Глава 1
- •18 Глава 1
- •20 Глава 1
- •22 Глава 1
- •24 Глава 1
- •26 Глава 1
- •31 Глава 1
- •34 Глава 2
- •36 Глава 2
- •Puc. 2.4. Дополнительные опции консольного приложения Win32
- •38 Глава 2
- •40 Глава 2
- •42 Глава 2
- •44 Глава 2
- •48 Глава 2
- •50 Глава 2
- •52 Глава 2
- •54 Глава 2
- •56 Глава 2
- •58 Глава 2
- •60 Глава 2
- •62 Глава 2
- •64 Глава 2
- •66 Глава 2
- •68 Глава 2
- •70 Глава 2
- •74 Глава 2
- •76 Глава 2
- •79 Глава 2
- •82 Глава 2
- •84 Глава 2
- •86 Глава 2
- •88 Глава 2
- •92 Глава 2
- •94 Глава 2
- •96 Глава 2
- •98 Глава 2
- •103 Глава 2
- •105 Глава 2
- •107 Глава 2
- •110 Глава 2
- •115 Глава 3
- •119 Глава 3
- •121 Глава 3
- •123 Глава 3
- •125 Глава 3
- •129 Глава 3
- •131 Глава 3
- •133 Глава 3
- •139 Глава 3
- •141 Глава 3
- •143 Глава 3
- •145 Глава 3
- •148 Глава 3
- •150 Глава 3
- •155 Глава 3
- •165 Глава 4
- •168 Глава 4
- •170 Глава 4
- •173 Глава 4
- •175 Глава 4
- •178 Глава 4
- •184 Глава 4
- •186 Глава 4
- •188 Глава 4
- •190 Глава 4
- •192 Глава 4
- •194 Глава 4
- •198 Глава 4
- •201 Глава 5
- •203 Глава 5
- •205 Глава 5
- •207 Глава 5
- •213 Глава 5
- •217 Глава 5
- •219 Глава 5
- •221 Глава 5
- •223 Глава 5
- •225 Глава 5
- •227 Глава 5
- •232 Глава 5
- •234 Глава 5
- •236 Глава 5
94 Глава 2
Объявление переменной value находится вне определения main (). Об этом объявлении также говорят, как об области видимости глобального пространства имен, потому что объявление переменной находится вне какого-либо пространства имен. Переменная доступна в любом месте main (), равно как и из определения любой дру- гой функции, которая может встретиться в том же исходном файле. Я поместил объ- явление value вне main (), просто чтобы продемонстрировать в следующем разделе, как его можно поместить в пространство имен.
Обратите внимание на отсутствие объявления using для cout и endl. В данном случае оно не нужно, поскольку имена из пространства имен std квалифицированы полностью. Может быть, поступать так и неразумно, но вы можете использовать cout в качестве имени своей переменной, и это не приведет ни к какой путанице, потому что cout будет отличаться от std: :cout. Таким образом, пространства имен предо- ставляют возможность отделить имена, используемые в одной части программы, от имен, применяемых в другой. Это чрезвычайно ценно, когда речь идет о крупном проекте, в работе над которым задействовано несколько групп программистов, зани- мающихся разными частями программы. Каждая команда может иметь собственное пространство имен, и в этом случае можно не беспокоиться о том, что они непредна- меренно используют одно и то же имя для различных функций.
Взгляните на следующую строку кода:
Этот оператор называется директивой using.
Эффект от его применения состоит в том, что все имена из пространства std импортируются в ваш исходный файл, так что вы можете из своей программы ссы- латься на все, что определено в этом пространстве имен, без квалифицированного имени. То есть, вы можете писать имя cout вместо std: :cout и end! вместо std: : endl. Недостатком такого применения директивы using является то, что сводится на нет основная причина применения пространств имен — то есть, предотвращение непреднамеренных конфликтов. Самый безопасный способ доступа к именам из про- странства имен — это квалифицировать каждое имя явно вместе с наименованием пространства имен; к сожалению, это делает код очень многословным и снижает его читабельность. Другая возможность — представить объявлением using только те име- на, которые вы используете в своем коде, например:
Эти операторы называются объявлениями using. Каждый оператор представляет одно имя из указанного пространства и позволяет применять его без квалификации внутри последующего программного кода. Это обеспечивает более удобный способ импортирования из пространства имен, поскольку импортируются лишь те имена, ко- торые действительно нужны в программе. Поскольку Microsoft установила прецедент импорта всего пространства имен System для кода C++/CLI, я буду придерживаться этого в примерах C++/CLI. Но вообще я рекомендую использовать в своем коде объ- явления using вместо директив using, когда вы пишете программы сколько-нибудь значительного размера.
Конечно, вы можете определить свое собственное пространство имен по своему выбору. В следующем разделе показано, как это сделать.
Данные,
переменные
и
вычисления
Объявление пространства имен
Для объявления пространства имен применяется ключевое слово namespace:
Это определяет пространство имен по имени myStuf f. Все объявления имен в коде между фигурными скобками будут определены внутри пространства имен myStuf f, поэтому для доступа к любому из этих имен из точки, находящейся вне дан- ного пространства, имя должно быть квалифицированным, то есть, снабженным пре- фиксом, либо должно присутствовать объявление using, идентифицирую- щее, что данное имя относится к пространству myStuf f.
Вы не можете объявить пространство имен внутри функции. Оно предназначе- но для другого применения: вы используете в вашей программе пространства имен как контейнер для функций, глобальных переменных и других именованных сущно- стей наподобие классов. Функция main (), где начинается выполнение программы, всегда должна быть в глобальном пространстве имен, иначе компилятор не распозна- ет ее.
Вы можете поместить переменную value из предыдущего примера в пространство имен:
Пространство имен myStuf f определяет область видимости, и все, что находится внутри него, квалифицировано именем этого пространства имен. Чтобы сослаться извне на имя, объявленное внутри пространства имен, вы должны квалифицировать его именем пространства имен. Внутри же области видимости пространства имен на любое имя, объявленное в нем, можно ссылаться без квалификации — здесь все иден- тификаторы принадлежат одному семейству. Но в функции main () вы теперь должны квалифицировать имя value префиксом myStuf f, иначе программа не скомпилиру- ется. Функция main () теперь ссылается на имена из двух разных пространств, и в общем случае вы можете иметь столько пространств имен в вашей программе, сколь- ко вам нужно. Вы можете исключить необходимость квалификации имени value, до- бавив директиву using: