Программирование >>  Инициализация объектов класса, структура 

1 ... 102 103 104 [ 105 ] 106 107 108 ... 395


inline int abs( int obj ) {

возвращает абсолютное значение iobj return( iobj < 0 ? -iobj : iobj );

inline int min( int p1, int p2 ) {

возвращает меньше из двух величин return( pi < p2 ? pi : p2 );

int gcd( int vl, int v2 )

возвращает наибольший общий делитель while ( v2 )

int temp = v2; v2 = vl % v2; vl = temp;

return vl;

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

#include <iostream>

int main() {

прочитать значения из стандартного ввода cout << Введите первое значение: ; int i; cin >> i;

if ( !cin ) {

cerr << !? Сшибка ввода - аварийн вод!\п ; return -1;

cout << Введите второе значение: ; int j; cin >> j;

if ( !cin ) {

cerr << !? Сшибка ввода - аварийн вод!\п ; return -2;

cout << \nmin: << min( i, j ) << endl;

i = abs( i

j = abs( j ) cout << НСД return 0;

<< gcd( i, j ) << endl;

Функция main() определяется в файле main.C.



int abs( int ); int min ( int, int ) ;

их необязательно определять, достаточно только объявить:

int gcd( int, int );

(В таком объявлении можно не указывать имя параметра, ограничиваясь названием типа.)

Объявления (а равно определения встроенных функций17) лучше всего помещать в заголовочные файлы, которые могут включаться всюду, где необходимо вызвать функцию. Таким образом, все файлы используют одно общее объявление. Если его необходимо модифицировать, изменения будут локализованы. Вот так выглядит

определение функции находится в файле gcd.C int gcd( int, int );

inline int abs(int i) {

return( i<0 ? -i : i );

inline int min(int vl.int v2) { return( vl<v2 ? vl : v2 );

заголовочный файл для нашего примера. Назовем его localMath.h:

17 Таким образом, как мы видим, определения встроенных функций могут встретиться в программе несколько раз! - Прим. ред.

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

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

Объявление функции состоит из типа возвращаемого значения, имени и списка параметров. Вместе эти три элемента составляют прототип. Объявление может появиться в файле несколько раз.

В нашем примере файл main.C не содержит определений abs(), miin() и gcd(), поэтому вызов любой из них приводит к ошибке компиляции. Чтобы компиляция была успешной,



Введите первое значение: 15 Введите второе значение: 123

выдаст следующий результат:

mm: 15

НСД: 3

7.2. Прототип функции

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

7.2.1. Тип возвращаемого функцией значения

Тип возвращаемого функцией значения бывает встроенным, как int или double, составным, как ints или double*, или определенным пользователем - перечислением или классом. Можно также использовать специальное ключевое слово void, которое

#include <string> #include <vector>

class Date { /* определение */ };

, int );

bool look up( int * double calc( double int count( const string &, char ); Dates calendar( const char );

говорит о том, что функция не возвращает никакого значения:

void sum( vector<int>&, int ); Однако функция или встроенный массив не могут быть типом возвращаемого значения.

массив не может быть типом возвращаемого значения

Следующий пример ошибочен:

int[10] foo bar();

Но можно вернуть указатель на первый элемент массива:

В объявлении функции опис1вается ее интерфейс. Он содержит все данные о том, какую информацию должна получать функция (список параметров) и какую информацию она возвращает. Для пользователей важны только эти данные, поскольку лишь они фигурируют в точке вызова. Интерфейс помещается в заголовочный файл, как мы поступили с функциями min() , abs() и gcd() .

При выполнении наша программа miain.C, получив от пользователя значения:



1 ... 102 103 104 [ 105 ] 106 107 108 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика