Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на ГОСЫ.docx
Скачиваний:
131
Добавлен:
10.05.2015
Размер:
808.24 Кб
Скачать

1. Средства модульного программирования: функции (назначение, описания, определения, вызов).

Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняется определенным правилам.

Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры, функции) и, возможно, некоторые исполняемые операторы инициирующей части.

Использование модулей – прекрасный инструмент для разработки библиотек прикладных программ и мощное средство модульного программирования.

Самый распространенный способ задания в С++ каких-то действий - это вызов функции, которая выполняет такие действия. Определение функции есть описание того, как их выполнить. Неописанные функции вызывать нельзя.

Каждая программа обязательно должная включать единственную функцию с именем main (главная функция). Именно функция main обеспечивает создание точки входа в откомпилированную программу. Кроме нее может входить произвольное количество неглавных функций, выполнение которых инициируется прямо или опосредованно вызовами из функции main. Всем именами функций программы по умолчанию присваивается класс памяти extern (т.е. имеет внешний тип компоновки и статическую продолжительность существования.).

Описание функции содержит ее имя, тип возвращаемого значения (если оно есть) и число и типы параметров, которые должны задаваться при вызове функции.

тип_функции имя_функции (спецификация_формальных_параметров);

Например: extern double sqrt(double);

Семантика передачи параметров тождественна семантике инициализации: проверяются типы фактических параметров и, если нужно, происходят неявные преобразования типов. Так, если учесть приведенные описания, то в следующем определении:

double sr2 = sqrt(2);

содержится правильный вызов функции sqrt() со значением с плавающей точкой 2.0. Контроль и преобразование типа фактического параметра имеет в С++ огромное значение.

В описании функции можно указывать имена параметров. Это облегчает чтение программы, но транслятор эти имена просто игнорирует.

Определения функций

Каждая вызываемая в программе функция должна быть где-то в ней определена, причем только один раз. Определение функции - это ее описание, в котором содержится тело функции.

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

тело_функции

Например:

extern void swap(int*, int*); // описание

void swap(int* p, int* q) // определение

{

int t = *p;

*p = *q;

*q = *t;

}

Не так редки случаи, когда в определении функции не используются некоторые параметры:

void search(table* t, const char* key, const char*)

{

// третий параметр не используется

// ...

}

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

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

Обращение к функции (вызов функции) – это выражение с операцией «круглые скобки». Операндами служат имя функции (либо указатель на функцию) и список фактических параметров.

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

summa = sum (slogaemoe1, slogaemoe 2);