![](/user_photo/2706_HbeT2.jpg)
- •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
24 Глава 1
Рис. 1.12. Выполнение консольной программы
Как
видите, в командной строке выводится
текст, заключенный в двойные кавыч-
ки
в исходном коде. Фрагмент,
который указан в конце текста — это
специаль-
ная последовательность,
которая называется управляющей
последовательностью и
означает
символ новой строки. Управляющие
последовательности служат для
пред-
ставления символов в текстовой
строке, которые невозможно непосредственно
вве-
сти с клавиатуры.
Предыдущий проект содержит в себе некоторый излишний багаж, который не ну- жен при работе с простыми примерами на С++. Опция предварительной компиляции заголовков, выбранная по умолчанию, приводит к созданию в проекте заголовочного файла stdafx.h. Это механизм, повышающий эффективность процесса компиляции, когда программа состоит из большого количества файлов, но не являющийся необхо- димым для большинства наших примеров. В их случае вы будете начинать с пустого проекта, к которому станете добавлять свои собственные исходные файлы. Теперь вы увидите, как это делается, создав новый проект и новое решение консольной про- граммы Win32 по имени Ext 102. После того, как вы введете имя проекта и щелкнете на кнопке ОК, выполните щелчок на Application Settings (Настройки приложения) в правой части следующего диалогового окна. Затем вы можете выбрать Empty project (Пустой проект) в дополнительных опциях, как показано на рис. 1.13.
Когда вы щелкнете на кнопке Finish (Готово), как и ранее, будет создан проект, но на этот раз — без каких-либо файлов.
После
этого добавьте в проект новый исходный
файл. Щелкните правой кнопкой
мыши на
панели Solution
Explorer
и выберите в контекстном меню пункт
Item
(Добавить1^
Новый элемент). Появится диалоговое
окно; щелкните на элементе
Code
(Код)
в правой панели и на С++
File
(.срр)
(Файл С++ (.срр)) — в левой. Введите
имя
Extl_02,
как
показано на рис. 1.14.
Когда вы щелкнете на кнопке Add (Добавить), новый файл добавится в проект и отобразится в окне редактора. Конечно, файл будет пустым, и в нем ничего не ото- бразится; в окне редактора введите приведенный ниже код.
26 Глава 1
Обратите внимание на автоматический отступ, выполненный при вводе вашего кода. С++ использует отступы, чтобы увеличить читабельность программ, и редактор автоматически выполняет отступ для каждой вводимой вами строки кода, основыва- ясь на содержимом предыдущих строк. В процессе ввода исходного кода вы также увидите в действии автоматическое выделение цветом синтаксиса. Некоторые эле- менты программы будут показаны в разных цветах, потому что редактор автоматиче- ски раскрашивает элементы языка в зависимости от их значения.
Приведенный
выше код составляет завершенную
программу. Возможно, вы от-
метите ряд
отличий по сравнению с кодом, сгенерированным
мастером Application
Wizard
для предыдущего примера. Нет директивыдля
файла
Этот
файл не входит в проект, поскольку вы
не используете средство предваритель-
ной
компиляции заголовков. Функция теперь
называется;
ранее она называлась
.
Фактически все программы на ISO/ANSI
С++ начинают выполнение с функ-
ции по
имени
.
Microsoft
также называет эту функцию
,
когда применя-
ется кодиоовка символов
Unicode,
и имя
определено
либо как
,
либо
как
,
в зависимости того, используется ли
кодировка Unicode.
В предыдущем
примере имя
определено
"за кулисами" как . Во всех примерах
ISO/ANSI
С++
вы будете применять имя
Операторы
вывода также несколько отличается.
Первый оператор ввы-
глядит так:
Здесь
вы видите два появления операции,
и каждое посылает то, что за ним
следует,
в i
—
стандартный поток вывода. Сначала в
поток отправляется
строка
между двойными кавычками, затем —,
где
.
определено в
стандартной
библиотеке как символ новой строки.
Ранее вы уже использовали управ-
ляющую
последовательностьдля
обозначения символа новой строки внутри
стро-
ки в двойных кавычках. То
есть, последний оператор можно было бы
записать и так:
Я должен пояснить, почему эта строка затенена, в то время как предыдущая — нет. Когда я повторяю строку кода без изменений, то оставляю ее не затененной. Данная последняя строка кода — новая, и ранее в примерах она не появлялась, поэтому я вы- делил ее полужирным.
Puc.
1.15. Выполнение программы Extl_02
Программирование
в Visual
С++ 2005
Обращение с ошибками
Конечно, если вы неправильно введете текст программы, то получите сообщения об ошибках. Чтобы увидеть, как это работает, вы можете внести ошибку преднамерен- но. Если вы уже получили какие-то сообщения об ошибках, то можете использовать их для этого упражнения. Вернитесь в панель редактора и удалите точку с запятой в конце предпоследней строки между фигурными скобками (в строке 8), а затем пере- компилируйте исходный файл. В выходной панели (Output pane) в нижней части окна приложения IDE вы увидите сообщение об ошибке:
Каждое сообщение об ошибке времени компиляции сопровождается номером, по которому вы можете найти ее описание в документации. В данном случае проблема очевидна, но в более сложных случаях документация может помочь вам найти при- чину ошибки. Чтобы обратиться к документации об ошибке, щелкните на строке в панели вывода, которая содержит ее номер, затем нажмите <F1>. Отобразится новое окно, содержащее более подробное описание этой ошибки. Если хотите, можете по- пробовать проделать это с данной простой ошибкой.
После того, как вы исправите ошибку, попробуйте заново собрать проект. Процесс сборки проекта работает эффективно, потому что он автоматически отслеживает со- стояние составляющих проект файлов. При нормальной сборке Visual С++ 2005 пере- компилирует только те файлы, которые были изменены с момента предыдущей ком- пиляции. Это значит, что если ваш проект состоит из нескольких исходных файлов, и вы отредактировали только один из них после того, как проект был собран в по- следний раз, то перед компоновкой и построением нового исполняемого файла будет перекомпилирован только один этот файл.
В процессе изучения вам также придется создавать консольные программы CLR, поэтому в следующем разделе будет показано, как выглядит консольный проект CLR.
Нажмите <Ctrl+Shift+N> для отображения диалогового окна New Project (Новый проект); затем выберите тип проекта CLR и шаблон CLR Console Application (Консоль- ное приложение CLR), как показано на рис. 1.16.
Введите
имя.
Когда вы щелкнете на кнопке ОК, файлы
проекта будут созда-
ны. Для консольного проекта CLR не существует различных опций, поэтому, работая с этим шаблоном, вы всегда будете начинать с одного и того же набора файлов. Если вам нужен пустой проект — что в этой книге не понадобится — то для этого предусмо- трен отдельный шаблон.
Если вы посмотрите на панель Solution Explorer, изображенную на рис. 1.17, то увидите несколько дополнительных файлов по сравнению с консольным проектом Win32.
Есть
пара файлов в виртуальной папке.
Файл
содержит
пик-
тограмму
приложения, которая отображается при
минимизации программы; файл
содержит
ресурсы приложения — в данном случае
только ссылку на пиктограмму.
Имеется
также файл по имени
Каждая
программа CLR
со-
стоит из одной или более сборок (assembly), каждая из которых представляет собой коллекцию кода и ресурсов, формирующую функциональную единицу. Сборка также содержит обширные данные для CLR; там есть спецификации используемых типов
данных, информация о версии кода, а также информация, указывающая, должно ли содержимое данной сборки быть доступно другим сборкам. Короче говоря, сборка — это фундаментальный строительный блок программ CLR.
Puc.
1.16. Создание нового приложения CLR
Программирование
в Visual
С++ 2005
Если
исходный код файла"
. срр
еще
не отображается в окне редактора,
вы-
полните двойной щелчок на имени
файла в панели Solution
Explorer.
Окно редактора
должно выглядеть, как
показано на рис. 1.18.
Puc. 1.18. Исходный код Exl_03. срр
Как
видите, здесь есть те же директивы,
что и в файле "родной" кон-
сольной программы С++, потому что программы CLR также используют предвари- тельно компилированные заголовки для эффективности. Но следующая строка отли- чается:
Все
средства библиотеки .NET
определены внутри пространства
имен
(namespace),
и
почти все стандартные функции, которые
вы будете использовать, скорее всего,
бу-
дут находиться в пространстве
именЭтот
оператор говорит о том, что после-
дующий
код программы использует пространство
,
но что же это такое — про-
странство
имен?
Пространство
имен — очень простая концепция. В коде
вашей программы, а также
в коде,
формирующем библиотеки .NET,
имена присваиваются многим вещам —
ти-
пам данных, переменным, блокам
кода, называемым функциями, и тому
подобно-
му. Проблема состоит в том,
что если вы используете имя, которое
уже встречает-
ся в библиотеке,
существует потенциальная вероятность
возникновения коллизии.
Пространство
имен предоставляет возможность обойти
эту проблему. Все имена в
коде библиотек,
определенные в пространстве имен,
неявно снабжены пре-
фиксом
— именем пространства имен. Поэтому
имя вродев
библиотеке — это
на
самом деле.
Это значит, что если вы нечаянно
используете имя
для
чего-либо в своем коде, то для доступа
к
из
библиотеки .NET
смо-
жете
применить имя
Два
двоеточия посредине — это операция,
называемая операцией разрешения
контекста
(scope
resolution
operator).
Здесь эта операция отделяет имя
пространства
именот
имени типа
.
Вы уже видели примеры таких составных
имен в
примерах
С++, представленных выше —и
.
Здесь та же история:
и
—
име-
на, определенные внутри пространства
имен
для
представления стандартного
выходного
потока и символа новой строки
соответственно.
Фактически
оператор iв
данном примере позволяет использо-
вать
любое имя из пространстване
указывая имени пространства имен в ка-
честве префикса. Если у вас случится конфликт между определенным вами именем и именем, определенным в библиотеке, вы можете решить эту проблему исключением