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

30Общие сведения о функциях. Определение функции

Принципы программирования на языке C++ основаны на понятии функции. В представленных ранее примерах мы уже воспользовались несколькими функциями: printf(), scanf(). Эти функции являются системными, однако в предыдущих примерах мы создали и несколько своих собственных функций под общим именем main(). Заметим, что выполнение программы всегда начинается с операторов, содержащихся в функции main(), затем последняя вызывает другие функции. Теперь мы переходим к вопросу о том, как создавать свои собственные функции.

    Что же такое функция? Функция - самостоятельная единица программы, спроектированная для реализации конкретной задачи. Функции в языке C++ играют ту же роль, какую играют функции, подпрограммы и процедуры в других языках, хотя детали их структуры могут быть разными. Вызов функции приводит к выполнению некоторых действий. Например, при обращении к функции printf() осуществляется вывод данных на экран. Другие же функции позволяют получать величины, используемые затем в других частях программы.

    Почему мы пользуемся функциями?

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

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

    Предположим, например, что мы хотим написать программу, которая делает следующее:

  • вводит набор чисел,

  • сортирует эти числа,

  • находит их среднее арифметическое.

    Соответствующую программу можно спроектировать так:

main ()

{

int list[50];

readlist (list); /* Ввод набора чисел. */

sort (list); /* Сортировка этих чисел. */

average (list); /* Поиск их среднего. */

}

    Разумеется мы должны еще запрограммировать три функции: readlist(), sort(), average(), но... это уже детали. Используя смысловые имена функций мы четко определяем, что программа делает и как она организована. После этого можно заниматься каждой функцией отдельно и совершенствовать ее до тех пор, пока она не будет правильно выполнять требуемую задачу. Дополнительное преимущество данного подхода состоит в том, что если мы создадим функции достаточно общего вида, то их можно будет использовать и в других программах.

31 Класс памяти (auto)

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

    Класс памяти характеризует время существования и область действия объекта в программе. Перечислим имена классов памяти:

  • auto,

  • extern,

  • static,

  • register.

    Остановимся более подробно на автоматическом классе памяти (auto).

    Объекты, описанные внутри блока:

  • с указанием класса памяти auto или

  • без указания класса памяти,

относятся к объектам автоматического класса памяти (автоматическим объектам).

    Автоматические объекты являются локальными по отношению к блоку, и их значения хранятся внутри того блока, где они описаны. Автоматические объекты существуют только во время выполнения данного блока и теряют свои значения при выходе из него. При каждом вхождении в блок им присваиваются начальные значения, если они заданы в описании. Если начальные значения не заданы, то значения автоматических объектов при входе в блок не определены.

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

    Пример. Результат работы следующей программы не определен, так как в функции P() значение переменной a не определено.

#include <iostream.h>

void main ()

{

auto int a=6;

void P();

/* -- */

P();

}

/* --- */

void P()

{

auto int a;

cout << a << endl;

}

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