 
        
        - •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.
Item
(Добавить1^
Новый элемент). Появится диалоговое
окно; щелкните на элементе
Code
(Код)
в правой панели и на С++
File
(.срр)
(Файл С++ (.срр)) — в левой. Введите
имя
Extl_02,
как
показано на рис. 1.14.
Когда вы щелкнете на кнопке Add (Добавить), новый файл добавится в проект и отобразится в окне редактора. Конечно, файл будет пустым, и в нем ничего не ото- бразится; в окне редактора введите приведенный ниже код.



26 Глава 1
Обратите внимание на автоматический отступ, выполненный при вводе вашего кода. С++ использует отступы, чтобы увеличить читабельность программ, и редактор автоматически выполняет отступ для каждой вводимой вами строки кода, основыва- ясь на содержимом предыдущих строк. В процессе ввода исходного кода вы также увидите в действии автоматическое выделение цветом синтаксиса. Некоторые эле- менты программы будут показаны в разных цветах, потому что редактор автоматиче- ски раскрашивает элементы языка в зависимости от их значения.
Приведенный
выше код составляет завершенную
программу. Возможно, вы от-
метите ряд
отличий по сравнению с кодом, сгенерированным
мастером Application
Wizard
для предыдущего примера. Нет директивы для
файла
для
файла
Этот
файл не входит в проект, поскольку вы
не используете средство предваритель-
ной
компиляции заголовков. Функция теперь
называется ;
ранее она называлась
;
ранее она называлась
 .
Фактически все программы на ISO/ANSI
С++ начинают выполнение с функ-
ции по
имени
.
Фактически все программы на ISO/ANSI
С++ начинают выполнение с функ-
ции по
имени .
Microsoft
также называет эту функцию
.
Microsoft
также называет эту функцию ,
когда применя-
ется кодиоовка символов
Unicode,
и имя
,
когда применя-
ется кодиоовка символов
Unicode,
и имя определено
либо как
определено
либо как ,
либо
как
,
либо
как ,
в зависимости того, используется ли
кодировка Unicode.
В предыдущем
примере имя
,
в зависимости того, используется ли
кодировка Unicode.
В предыдущем
примере имя определено
"за кулисами" как . Во всех примерах
ISO/ANSI
С++
вы будете применять имя
определено
"за кулисами" как . Во всех примерах
ISO/ANSI
С++
вы будете применять имя

Операторы
вывода также несколько отличается.
Первый оператор в вы-
вы-
глядит так:

Здесь
вы видите два появления операции ,
и каждое посылает то, что за ним
следует,
в i
,
и каждое посылает то, что за ним
следует,
в 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
со-
Каждая
программа CLR
со-
стоит из одной или более сборок (assembly), каждая из которых представляет собой коллекцию кода и ресурсов, формирующую функциональную единицу. Сборка также содержит обширные данные для CLR; там есть спецификации используемых типов
данных, информация о версии кода, а также информация, указывающая, должно ли содержимое данной сборки быть доступно другим сборкам. Короче говоря, сборка — это фундаментальный строительный блок программ CLR.

 Puc.
1.16. Создание нового приложения CLR
Puc.
1.16. Создание нового приложения CLR
Программирование
в Visual
С++ 2005    
Если
исходный код файла "
. срр
еще
не отображается в окне редактора,
вы-
полните двойной щелчок на имени
файла в панели Solution
Explorer.
Окно редактора
должно выглядеть, как
показано на рис. 1.18.
"
. срр
еще
не отображается в окне редактора,
вы-
полните двойной щелчок на имени
файла в панели Solution
Explorer.
Окно редактора
должно выглядеть, как
показано на рис. 1.18.
	
		 
		
Puc. 1.18. Исходный код Exl_03. срр
	Как
	видите, здесь есть те же директивы ,
	что и в файле "родной" кон-
,
	что и в файле "родной" кон-
сольной программы С++, потому что программы CLR также используют предвари- тельно компилированные заголовки для эффективности. Но следующая строка отли- чается:
	
	Все
	средства библиотеки .NET
	определены внутри пространства
	имен
	(namespace),
и
	почти все стандартные функции, которые
	вы будете использовать, скорее всего,
	бу-
дут находиться в пространстве
	имен Этот
	оператор говорит о том, что после-
дующий
	код программы использует пространство
Этот
	оператор говорит о том, что после-
дующий
	код программы использует пространство ,
	но что же это такое — про-
странство
	имен?
,
	но что же это такое — про-
странство
	имен?
	Пространство
	имен — очень простая концепция. В коде
	вашей программы, а также
в коде,
	формирующем библиотеки .NET,
	имена присваиваются многим вещам —
	ти-
пам данных, переменным, блокам
	кода, называемым функциями, и тому
	подобно-
му. Проблема состоит в том,
	что если вы используете имя, которое
	уже встречает-
ся в библиотеке,
	существует потенциальная вероятность
	возникновения коллизии.
Пространство
	имен предоставляет возможность обойти
	эту проблему. Все имена в
коде библиотек,
	определенные в пространстве имен ,
	неявно снабжены пре-
,
	неявно снабжены пре-
	фиксом
	— именем пространства имен. Поэтому
	имя вроде в
	библиотеке — это
в
	библиотеке — это
	на
	самом деле .
	Это значит, что если вы нечаянно
	используете имя
.
	Это значит, что если вы нечаянно
	используете имя
	 для
	чего-либо в своем коде, то для доступа
	к
	для
	чего-либо в своем коде, то для доступа
	к из
	библиотеки .NET
	смо-
из
	библиотеки .NET
	смо-
	жете
	применить имя
	Два
	двоеточия посредине — это операция,
	называемая операцией разрешения
контекста
	(scope
	resolution
	operator).
	Здесь эта операция отделяет имя
	пространства
имен от
	имени типа
от
	имени типа .
	Вы уже видели примеры таких составных
	имен в
.
	Вы уже видели примеры таких составных
	имен в
	примерах
	С++, представленных выше — и
и .
	Здесь та же история:
.
	Здесь та же история:
	
		 
		 
		
		
 и
и —
	име-
на, определенные внутри пространства
	имен
—
	име-
на, определенные внутри пространства
	имен для
	представления стандартного
выходного
	потока и символа новой строки
	соответственно.
для
	представления стандартного
выходного
	потока и символа новой строки
	соответственно.
	Фактически
	оператор i в
	данном примере позволяет использо-
в
	данном примере позволяет использо-
	вать
	любое имя из пространства не
	указывая имени пространства имен в ка-
не
	указывая имени пространства имен в ка-
честве префикса. Если у вас случится конфликт между определенным вами именем и именем, определенным в библиотеке, вы можете решить эту проблему исключением
