Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

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

Теперь вы можете построить проект точно так же, как в предыдущем случае. Обратите внимание, что все открытые в панели редактора исходные файлы сохраня- ются автоматически, если вы не сделали этого раньше. Когда программа будет успеш- но скомпилирована, нажмите <Ctrl+F5>, чтобы ее выполнить. Вы увидите окно, по- казанное на рис. 1.15.

Программирование в Visual С++ 2005 27

Обращение с ошибками

Конечно, если вы неправильно введете текст программы, то получите сообщения об ошибках. Чтобы увидеть, как это работает, вы можете внести ошибку преднамерен- но. Если вы уже получили какие-то сообщения об ошибках, то можете использовать их для этого упражнения. Вернитесь в панель редактора и удалите точку с запятой в конце предпоследней строки между фигурными скобками (в строке 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 29

Если исходный код файла" . срр еще не отображается в окне редактора, вы- полните двойной щелчок на имени файла в панели Solution Explorer. Окно редактора должно выглядеть, как показано на рис. 1.18.

Puc. 1.18. Исходный код Exl_03. срр

Как видите, здесь есть те же директивы, что и в файле "родной" кон-

сольной программы С++, потому что программы CLR также используют предвари- тельно компилированные заголовки для эффективности. Но следующая строка отли- чается:

Все средства библиотеки .NET определены внутри пространства имен (namespace), и почти все стандартные функции, которые вы будете использовать, скорее всего, бу- дут находиться в пространстве именЭтот оператор говорит о том, что после- дующий код программы использует пространство, но что же это такое — про- странство имен?

Пространство имен — очень простая концепция. В коде вашей программы, а также в коде, формирующем библиотеки .NET, имена присваиваются многим вещам — ти- пам данных, переменным, блокам кода, называемым функциями, и тому подобно- му. Проблема состоит в том, что если вы используете имя, которое уже встречает- ся в библиотеке, существует потенциальная вероятность возникновения коллизии. Пространство имен предоставляет возможность обойти эту проблему. Все имена в коде библиотек, определенные в пространстве имен, неявно снабжены пре-

фиксом — именем пространства имен. Поэтому имя вродев библиотеке — это

на самом деле. Это значит, что если вы нечаянно используете имя

для чего-либо в своем коде, то для доступа киз библиотеки .NET смо-

жете применить имя

Два двоеточия посредине — это операция, называемая операцией разрешения контекста (scope resolution operator). Здесь эта операция отделяет имя пространства именот имени типа. Вы уже видели примеры таких составных имен в

примерах С++, представленных выше —и. Здесь та же история:

std — наименование пространства имен родных библиотек С++, аи— име- на, определенные внутри пространства имендля представления стандартного выходного потока и символа новой строки соответственно.

Фактически оператор iв данном примере позволяет использо-

вать любое имя из пространстване указывая имени пространства имен в ка-

честве префикса. Если у вас случится конфликт между определенным вами именем и именем, определенным в библиотеке, вы можете решить эту проблему исключением