Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Cpp.doc
Скачиваний:
6
Добавлен:
20.11.2019
Размер:
603.14 Кб
Скачать

Int MyRand(){

return rand()%6+1; // функция rand возвращает целое от 0 до RAND_MAX

}

Таким образом, общая форма записи функции имеет вид:

имяТипа имяФункции (списокАргументов)

{

операторы;

return значение; // тип возвращаемого значения определяется типом

// функции (имяТипа)

}

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

Int func(){ return 1;} // правильное выражение

double func1(){ return 1;} // правильно, 1 преобразуется к типу double

Int func2(){return 0.146;} // неправильно, 0.146 преобразуется к int с

// потерей точности

Синтаксис языка накладывает ограничения на типы возвращаемых значений. В С++ массив не может быть возвращаемым значением! Все остальные типы годятся для применения. Интересно, что хотя функция в С++ не может возвратить массив непосредственно, но может возвратить массив, как часть структуры.

Если функция выполняет какие-то действия, но не возвращает значения, то ее следует описать как void:

// функция меняет местами значения p и q

Void swap(int p, int q)

{

int t = p;

p = q;

q = t;

}

В функции может использоваться несколько операторов возврата. Выполнение функции прекращается при достижении первого встреченного оператора return. Пример:

Int bigger(int a,int b)

{

if (a>b)

return a; // если a>b, функция заканчивает выполняться здесь

else

return b; // иначе выполнение функции заканчивается здесь

}

О пользе прототипов

Прототип описывает интерфейс функции и облегчает компиляцию программы. Почему? Во-первых, прототип сообщает компилятору о количестве аргументов функции и их типе. Если в вызывающей функции нарушено соответствие между ними, то компилятор выдаст сообщение об ошибке. Во-вторых, прототип содержит указание на тип возвращаемого значения функции, и под него отводится конкретный размер памяти. Без прототипа эти действия были бы затруднены, особенно когда функция размещена в отдельном файле. То же самое относится к случаю, когда функция содержится в какой-либо внешней библиотеке1. Еще одним аргументом «за» прототипирование функций является стиль программирования, принятый в С++. Он требует, чтобы функция main() всегда была первой и определяла структуру всей программы.

4.2. Передача параметров функций

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

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

Упражнения.

1. Реализуйте программу вычисления случайных чисел, пример которой приведен в 4.1. Выведите значение RAND_MAX. Для использования функции rand( ) необходимо подключить заголовочный файл stdlib.h.

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