Проект представляет собой группу файлов, в которых размещены код и ресурсы программы. Для создания проекта используется специальное приложение – AppWizard – Мастер приложений.
Для создания нового проекта выберите New… из меню File. Эта команда открывает окно диалога New (рис. 3). Здесь вы должны выполнить следующее:· выбрать тип создаваемого приложения;· выбрать место расположения папки создаваемого проекта;· указать имя проекта;· на этом шаге определяется, создается ли новое рабочее пространство WorkSpace или проект включается в рабочее пространство, открытое в данный момент в среде.
Дальнейшие действия будут зависеть от типа выбранного приложения.
Чтобы закрыть проект, можно воспользоваться командой File/Close Workspace.
AppWizard позволяет создавать несколько типов приложений, приведем краткую характеристику некоторых из них:
MFC AppWizard(exe) – наиболее часто используемый тип приложения – приложение на базе библиотеки классов MFC;
MFC AppWizard(dll) – динамическая библиотека на базе библиотеки классов MFC;
Win32 Application – приложение, использующее библиотеку Win32 API;
Win32 Console Application – консольное приложение, т.е. приложение с минимальным интерфейсом, использующее для вывода результатов на экран окно, аналогичное окну MS-DOS в текстовом режиме;
Win32 Dynamic-Link Library – динамическая библиотека на базе библиотеки Win32 API;
Win32 Static Library – статическая библиотека на базе библиотеки Win32 API.
Поскольку требуется создать консольное приложение, следует выбрать опцию Win32 Console Application. Информация о размещении новой рабочей области проекта вводится в поле Location (местоположение). Здесь укажите личную папку. Это можно сделать, воспользовавшись расположенной справа кнопкой Browse… (просмотр). Задайте имя нового проекта в поле Project Name (имя проекта), например, First. Одновременно с вводом имени проекта, это же имя автоматически добавляется в качестве подкаталога в поле Location. После выполнения описанных действий нажмите кнопку OK, в результате чего на экране появится диалоговое окно мастера создания консольного приложения (рис. 4). Мастер предлагает несколько вариантов создания заготовок приложения:· An empty project (Пустой проект) для этого вида приложения мастер создает только файлы *.dsp (project - проект), *.dsw (workspace - рабочее пространство)и пустую папку Debug для отладочной версии приложения, либо Release для рабочей версии. Для выбора активной конфигурации проекта (обычно это Debug (отладочная версия) или Release (рабочая версия)) зайдите в Build\Set Active Configuration\ и выбирайте. Файлы с кодом программы не создаются, и их надо добавлять вручную. В окне Project Workspace такого проекта на диаграмме ClassView нет ни одного элемента, а диаграмма FileView содержит пустые папки Source Files, Header Files и Resource Files - для файлов исходного кода программы, заголовочных файлов и файлов ресурсов соответственно. Этот вид приложения может быть использован как для создания объектно-ориентированной программы, так и алгоритмической.· A simple application (Простое приложение) в которое включен файл, содержащий функцию main(), и служебный модуль со стандартным именем StdAfx, состоящий из двух файлов: заголовка stdafx.h и реализации stdafx.cpp. Такой проект может быть откомпилирован и выполнен несмотря на то, что функция main() не содержит никаких действий. Чтобы это приложение выполняло какие-нибудь действия, надо отредактировать функцию main() и, если надо, добавить в проект модули. Данный вид приложения может быть также использован для создания как объектно-ориентированной программы, так и алгоритмической.Например, файл исходного кода (проект назван Listing2, поэтому и файл будет называться Listing2.cpp), причём следующего содержания вышел файл:
#include “stdafx.h” - это подключается файл stdafx.h. А он в свою очередь относится к созданному всё тем же мастером файлу stdafx.cpp. Файл stdafx.cpp ответственен за создание перекомпилированных заголовков. К нашей программе может подключаться много различных файлов заголовков. Это могут быть как стандартные файлы, которые предоставляет нам, к примеру, Microsoft, или же наши собственные. Если каждый раз в проекте компилировать все файлы заново - очень долго получается. Но мы ведь не все файлы изменять будем! Те, что не изменяются или изменяются очень редко - компилируются один раз при первой компиляции, а в последующем будут обрабатываться в уже скомпилированном виде. Заново будут компилироваться только часто изменяемые файлы, чтобы внесённые изменения отражались на работе программы. Это значительно сокращает время компиляции проекта. Так вот в файле stdafx.h и будут указываться (подключаться) те файлы, которые изменяются редко (вообще не изменяются) и которые будут использоваться как уже перекомпилированные.
Для указания заголовочных файлов стандартной библиотеки не требуется расширение. Они распознаются как заголовочные файлы, потому что вместо синтаксиса #include “…” используется #include <…>. И расширение .h в таком случае не указывается. Для каждого заголовочного файла стандартной библиотеки языка С существует соответствующий стандартный заголовочный файл С++. В первом случае это будет прописываться #include <*.h>, во втором #include <*>. Как правило, для включения библиотечных файлов пользуйтесь угловыми скобками < >, а для своих собственных - кавычками “ ”. Например:
#include <iostream> // из стандартного каталога включаемых файлов
#include “myheader.h” // из текущего каталога
Пробелы внутри < > или “ ” имеют значение!
#include < iostream > // не найдёт <iostream>
Функция main.
int main(int argc, char* argv[])
Часто консольные программы организуются так, что после вызова программы из командной строки, программа выдаёт нам приглашение ввести необходимые данные. Это бывает весьма неудобно для пользователя. Если таких данных немного, то возможно передать их программе ещё при её запуске. Большинство операционных систем, те же DOS и UNIX, например, позволяют передать программе при запуске несколько параметров (или один) (или ни одного). Консоль, естественно, тоже такую возможность нам предоставляет. Эти параметры называются параметрами командной строки и пишутся при вызове программы после имени самой программы через пробел. Например так:
C:\>Stebatrix.exe steb 34
Итак, функция main, как правило, имеет два параметра: целый argc и массив строк argv.
Первый параметр argc (argument counter - счётчик аргументов (параметров)) содержит в себе количество параметров командной строки.
Второй argv (argument vector - вектор (массив) аргументов) содержит в себе массив параметров командной строки. Поскольку параметры являются символьными строками, это будет массив строк, причём смысл здесь такой: argv имеет тип char* [argc+1] (не забыли про нулевой элемент массива?). Нулевым элементом массива argv будет имя программы. Список аргументов ограничен нулём, то быть argv[argc] == 0. В случае, когда командная строка выглядит так:
C:\>Stebatrix.exe steb 34
запустив программу вот, что получим:
Пример, Listing2.cpp
Подключение iostream и cstdlib можно объявить не в файле Listing2.cpp, а в stdafx.h. Эти файлы изменять не будем, а значит. Тогда проект компилироваться будет быстрее, хотя в случае нашего проекта это и не будет заметно. В таком случае уберите эти две строчки
#include <iostream>
#include <cstdlib>
из Listing2.cpp и вставьте их в stdafx.h вот в это место:
Эти две строки должны быть только в одном файле: или Listing2.cpp, или stdafx.h - два раза одно и то же подключать не надо!
При вызове из консоли программа будет принимать два параметра: первый - это строка текста, которую надо будет вывести, а второй - сколько раз надо будет её вывести.
cstdlib подключается для того, чтобы воспользоваться функцией atoi. Эта функция имеет во какую прототип:
int atoi (const char* p);
Она преобразует строку p, представляющую собой численное значение (только из цифирей состоящую) в само численное значение. То быть строка ‘12345’ будет преобразована в 12345. Весьма полезная функция. Есть ещё две: atof и atol, преобразующие строчку в double и long соответственно. Если же строчка не представляет собой число (например ‘123g4a’) то будет возвращён 0. Вот как раз с помощью функции atoi мы преобразуем символьную строчку argv[2] в целое av2. Преобразуем, а потом циклом for выводим av2 раз строку argv[1].
Командная строка для вызова программы будет иметь, к примеру, такой вид:
D:\Program Files\Microsoft Visual Studio\MyProjects\Listing2\Release>listing2 We_have_Matrix! 3
Только обратите внимание на то, что We_have_Matrix! пишем не через пробел, а через символ подчёркивания, т.к. пробелами разделяются параметры и прога так не поймёт (поймёт неправильно).
· A “Hello World!” application (Приложение “Hello World!”) Имеет такой же файловый состав, что и предыдущее приложение, только тексты файлов stdafx.h и stdafx.cpp несколько изменены. Так, в stdafx.h подключается заголовочный файл stdio.h, необходимый для вывода текста на экран с помощью функции printf(). Этот вид приложения может быть использован как образец готового приложения, а может быть отредактирован для решения какой-либо задачи.
Функция printf() осталась от языка С. Тем не менее, её очень часто можно встретить. Тем более что, хороший код на С будет прекрасно компилироваться и работать в компиляторе для С++. Даже вместе с кодом на С++ (правда в таком случае проблема совместимости всё же время от времени возникает, но она легко решаема).
Прототип функции printf():
int printf(const char*, …)
Возвращает она нам количество выведенных символов. В случае строки “Hello World!” их будет 13 (не забываем про NULL в конце строки). В качестве параметра она принимает строку в стиле С (массив символов) (или же непосредственно строку в кавычках), причём их может быть несколько, тогда просто через запятую перечислим:
printf("Hello”, “ World!”, “\n”);
Это также как в cout можете несколько раз использовать <<, а в cin >>.
Для ввода в языке С++ используется: std::cin >> и дальше имя переменной, в которую будет записано то, что мы вводим. В С этим занимается функция gets() и др.
Также в printf() могут указываться спецификаторы преобразования. Использование функции printf () имеет большой недостаток: плохой контроль типов данных (при неявных преобразованиях типов, например), что даже у опытных программистов становится иногда причиной ошибок.
· An application that supports MFC (Приложение с поддержкой MFC) применяется только для разработки объектно-ориентированных программ. Имеет более сложный файловый состав, что связано с особенностями проекта на базе MFC. MFC - Microsoft Foundation Class (базовые классы Microsoft). Пакет MFC даёт возможность разрабатывать GUI-приложения (GUI - Graphic User Interface - графический пользовательский интерфейс) для Windows на языке С++ с использованием большого набора библиотечных классов, причём эти библиотеки являются объектно-ориентированными (помимо инкапсуляции поддерживают наследование и полиморфизм). Однако, поскольку MFC в значительной степени ориентирована на работу с окнами, документами, представлениями и т.д., большая её часть остаётся невостребованной консольным приложением.Как видно, в проектах используется модуль StdAfx, создаваемый мастером AppWizard для каждого приложения. Этот модуль предназначен для создания так называемых прекомпилированных файлов(*.pch), которые повышают производительность компиляции. Заголовочный файл stdafx.h включается в каждый исходный файл проекта первым и содержит директивы include для подключения библиотек C++. Таким образом, каждый модуль проекта имеет возможность использовать подключенные библиотеки, при этом во время его компиляции не требуется выполнять обработку файлов заголовков, поэтому, он может быть скомпилирован быстрее.
Оба файла модуля StdAfx помещаются в папку проекта. В процессе работы над проектом они могут быть отредактированы пользователем, например, в stdafx.h можно добавить подключение заголовочных файлов с помощью директивы include.
Рассмотрим два примера создания консольного приложения
Пример 1. Вычислить значение переменной y = log x, где значение переменной x вводится с клавиатуры.
Последовательность действий:
· ·открыть VC++ 6.0 и выполнить команду File/New;
· ·в окне File/Projects указать:
- тип приложения – Win32 Console Application,
- имя проекта – lab1,
- место размещения проекта – R:\work (Ваш рабочий диск!!!)
- нажать кнопку ОК;
· на следующем шаге выбрать вид консольного приложения –
An empty project;
· соглашаться со всем, что предлагает среда, в результате получим каркас проекта, в котором нет ни одного файла. При этом на диске будет создан каталог с именем lab1;
· ·добавить файл типа *.cpp для размещения функции main(): перейти в окно FileView, выделить папку Source Files (источники) и выполнить команду File/New;
· в окне File/New выбрать тип файла C++ Source File и указать его имя lab1.cpp. Этот файл будет помещен в каталог проекта lab1. На диаграмме файл lab1.cpp будет помещен в папку Source Files;
· на диаграмме Source Files дважды щелкнуть левой кнопкой мыши на файле lab1.cpp, файл будет открыт в текстовом редакторе среды.
· ввести в файл текст программы:
#include <stdio.h>
#include <math.h>
int main(void)
{
puts("Enter number");
float num;
scanf("%f",&num);
float y10=log10(num);
printf("Num=%.2f,Dec.Log=%.2f",num,y10);
return 0;
}
Замечание. В тексте программы неслучайно для сообщений, выводимых на экран, использовались латинские символы. Дело в том, что текстовый редактор использует для кириллицы кодировку Windows, а окно выполнения программы – кодировку ASCII для MS-DOS. Если использовать кириллицу для вывода сообщений, тексты на экране нельзя будет прочитать. Можно тексты сообщений ввести с помощью редактора для MS-DOS, но тогда эти тексты нельзя будет прочитать в редакторе среды.
· сохранить текст файла;
· откомпилировать проект, для этого можно воспользоваться кнопкой на панели инструментов с изображением восклицательного знака (команда Execute). Проект сначала будет откомпилирован, затем выполнен. Если в тексте программы компилятор найдет ошибки, то выведет их в окно Output панели Build. Если в панели Build дважды щелкнуть мышью на ошибке, среда покажет место ошибки в тексте программы. Исправление ошибок всегда надо начинать с первой ошибки, так как остальные ошибки могут оказаться следствием первой;
· в окне программы ввести данные, получить результат:
Num=34.00,Dec.Log=1.53 Press any key to continue
· завершить программу нажатием любой клавиши на клавиатуре.
Пример 1 Остановимся на варианте – выбор переключателя An empty project (пустой проект). При этом не создается никаких дополнительных файлов – только файл проекта. В дальнейшем в него нужно будет добавить файлы, содержащие текст программы. Перед началом работы мастер сообщает, какие действия он намерен сделать, и спрашивает подтверждение.



