- •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в данном примере позволяет использо-
вать любое имя из пространстване указывая имени пространства имен в ка-
честве префикса. Если у вас случится конфликт между определенным вами именем и именем, определенным в библиотеке, вы можете решить эту проблему исключением