Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог_Пособие C++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.03 Mб
Скачать

1.1.2 Понятие проекта

Исходный текст программы может находиться в одном или нескольких файлах. Большие программы обычно разбивают на несколько файлов по каким-либо признакам, например, по группам реализуемых функций. Такая группа файлов называется проектом (Project). Многие среды разработки имеют собственные встроенные средства управления проектами и работают со своими файлами конфигурации проекта (.dsp – Microsoft Visual C++, .bpr – Borland C++ Builder и др.)

Использование проекта помогает, например, отслеживать зависимости между файлами при компиляции. Предположим, у нас есть файл consts.h и два использующих его файла – a.cpp и b.cpp. При компиляции будут созданы объектные файлы a.obj и b.obj. Если мы внесём изменения в файл a.cpp, то нам нужно будет заново откомпилировать только его. Однако, если мы изменим consts.h, то необходимо перекомпилировать оба файла – a.cpp и b.cpp. Когда все файлы программы объединены в проект, среда разработки определяет, что требуется перекомпилировать, а что - нет.

Обычно в среде разработки можно выполнить настройки различных параметров компиляции и компоновки проекта – например, включить поддержку стандарта С++11 (если эта опция по умолчанию выключена), добавить внешнюю библиотеку для компоновки и др.

1.1.3 Структура программы на языке С++. Первый пример

С учётом сказанного выше, программа на языке С++ – один или несколько текстовых файлов, которые могут содержать следующие основные структурные элементы:

  1. директивы препроцессора (обычно располагаются в начале файла)

  2. описания переменных и констант

  3. описания типов (классов, шаблонов)

  4. описания функций

  5. комментарии.

Компилятор отличает описания функций от других описаний по наличию круглых скобок, поэтому они обязательны в описании функций, даже если те не содержат списка параметров. Отметим, что в С++ не используется понятие процедуры, вместо него говорят о функции, которая не возвращает результата (в этом случае в качестве типа результата указывается зарезервированное слово voidпустой тип). Любая программа обязательно должна содержать функцию с именем main (или WinMain для графических приложений Windows), которая является точкой входа в программу. Другие функции добавляются в программу при необходимости и вызываются либо из функции main, либо из других функций.

Описание функции традиционно содержит заголовок

тип_результата имя_функции ([список_параметров])

и тело, представляющее собой блок – группу операторов, размещённых между символами- ограничителями { …}. Внутри блока могут располагаться вложенные блоки, при этом должен соблюдаться баланс фигурных скобок. Понятие оператора традиционное – это элементарная инструкция (единица действия) программы. В С++ любой оператор завершается символом ;

Каждая функция обычно содержит оператор (возможно, не один)

return [результат_функции];

который означает немедленный выход из функции и передачу результата в вызывающую функцию. Если тип функции - void, то она или не содержит оператора return или имеет операторы return; (без параметров), которые означают выход из функции без возвращения результата.

Функция main обычно имеет тип int (результат целого типа) и содержит оператор return 0; который в данном случае означает выход из программы и передачу в операционную систему кода завершения 0 – признака успешного завершения программы. Если в функции main оператор return 0; отсутствует, то после выполнения всех операторов код завершения ноль возвращается в операционную систему автоматически.

Подробная информация о функциях представлена в разделах 1.10-1.13.

Описания переменных могут располагаться как вне функций (такие переменные являются глобальными), так и в теле функций (такие переменные локализованы в том блоке, в котором они описаны). Обратим внимание, что переменные, описанные в функции main, являются локальными и не могут быть использованы ("не видны") в других функциях.

Также обратим внимание на чувствительность языка к регистру – N и n являются разными именами.

Для предотвращения конфликтов имён при разработке крупных программных продуктов (одно и то же имя получили два разных объекта) в языке С++ вводится понятие пространства имён (namespace) – каждое имя должно быть уникальным только в пределах своего пространства имён. Все функции и другие объекты стандартной библиотеки С++ определены в пространстве имён std (сокращение от standard), поэтому в начало программы часто помещается директива

using namespace std;

Если этой строки в программе нет, то для обращения к любому идентификатору из стандартной библиотеки требуется добавить к его имени префикс std:: , например, при использовании стандартного потока вывода cout придётся везде указывать std::cout. Такой способ часто применяется (и рекомендуется!) при разработке крупных программных продуктов, использующих много сторонних библиотек со своими пространствами имён. В примерах пособия для сокращения текста часто будет использоваться директива using.

Подробнее пространства имён и их элементы рассматриваются в разделе 1.14.

Комментарии в программе на С++ могут быть:

многострочными /*текст комментария любого размера*/

однострочными //текст комментария до конца текущей строки

Не следует считать комментарии второстепенными элементами программы, не имеющими существенного значения, – они способствуют лучшему пониманию текста программы, следовательно, существенно повышают такой важный показатель качества программного продукта как сопровождаемость. Стоит отметить, что написание комментариев к программе – не менее сложная и ответственная работа, чем разработка самого программного кода.

Пример 1.1. Для примера рассмотрим простую программу на С++, которая вычисляет площадь кольца по заданным значениям внутреннего и внешнего радиусов (r1 и r2 соответственно). Первый пример трудно сделать безупречным – чтобы продемонстрировать использование вспомогательной функции, вычисляющей площадь круга, задача решается "в лоб", т.е. площадь кольца находится как разность площадей большого круга (с радиусом r2) и малого (с радиусом r1). Обратите внимание на определение в программе числа ПИ – в стандарте С++ не определена соответствующая константа. Многие компиляторы поддерживают M_PI в библиотеке cmath, но использование M_PI может ухудшить переносимость программы (ещё одно важное качество программного продукта).

// Пример 1.1 – программа вычисления площади кольца

#include<iostream> // подключение библиотеки ввода/вывода

#include<cstdlib> // для работы system("pause")

using namespace std; //используем стандартное пространство имён std

const double PI = 3.1415926536; //определение ПИ -глобальная константа

double s_circle(double r) { // вычисление площади круга с радиусом r

return PI*r*r;

}

int main() {

//настройка корректного вывода кириллицы

setlocale(LC_ALL,"Russian");

double r1, r2, s;

cout << "Введите внутренний и внешний радиусы "; cin >> r1 >> r2;

s = s_circle(r2) - s_circle(r1);

cout << "S = " << s;

system("pause"); //пауза до нажатия любой клавиши

return 0; // нормальный выход из программы с кодом завершения 0

}

В дальнейших примерах мы не будет пользоваться функциями setlocale и system("pause"). Кириллицу по возможности использовать не будем, а функцию паузы возложим на среду разработки (например, в Visual Studio при запуске программы с помощью комбинации клавиш CTRL-F5 пауза обеспечивается автоматически). При необходимости добавьте вызов system("pause"); в другие примеры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]