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

1 ... 110 111 112 [ 113 ] 114 115 116 ... 395


first string second string

Напишите функцию main() , вызывающую новый вариант putValues() со следующим

put function declarations in header files use abstract container types instead of built-in arrays declare class parameters as references use reference to const types for invariant parameters

списком строк:

use less than eight parameters

Упражнение 7.8

В каком случае вы применили бы параметр-указатель? А в каком - параметр-ссылку? Опишите достоинства и недостатки каждого способа.

7.4. Возврат значения

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

return;

данная. Инструкция return может употребляться в двух формах:

return expression;

Первая форма используется в функциях, для которых типом возвращаемого значения является void. Использовать return в таких случаях обязательно, если нужно принудительно завершить работу. (Такое применение return напоминает инструкцию break, представленную в разделе 5.8.) После конечной инструкции функции подразумевается наличие return. Например:



void d copy( double src, double *dst, int sz )

копируем массив src в dst

для простоты предполагаем, что

* для простоты предполагаем, что они одного размера */

завершение, если хотя бы один из указателей равен 0 if ( !src !dst ) return;

завершение,

ес указате адресат один и тот же массив

if ( src == dst )

return;

копировать нечего

if ( sz == 0 )

return;

все еще не закончили? тогда самое время что-то сделать for ( int ix = 0; ix < sz; ++ix )

dst[ix] = src[ix];

явного завершения не требуется

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

return val * factorial(val-1);

В функции, не объявленная с void в качестве типа возвращаемого значения, обязательно использовать вторую форму return, иначе произойдет ошибка компиляции. Хотя компилятор не отвечает за правильность результата, он сможет гарантировать его наличие. Следующая программа не компилируется из-за двух мест, где программа завершается без возврата значения:



определение интерфейса класса Matrix #include Matrix.h

bool is ea1( const Matrix sml, const Matrix sm2 ) {

/* Ес содержимое двух объектов Matrix одинаково,

* возвращаем true;

* в противном случае - false

сравним количество

о столбцов

if ( ml.colSize() != m2.co1Size() )

ошибка: нет возвращаемого значения return;

сравним количество строк

if ( ml.rowSize() != m2.rowSize() )

ошибка: нет возвращаемого значения

ошибка: return;

пробежимся по обеим матрицам, пока не найдем неравные элементы for ( int row = 0; row < ml.rowSize(); ++row )

for ( int col = 0; co1 < ml.colSize(); ++co1 ) if ( ml[row][col] != m2[row][col] ) return false; ошибка: нет возвращаемого значения для случая равенства

Если тип возвращаемого значения не точно соответствует указанному в объявлении функции, то применяется неявное преобразование типов. Если же стандартное приведение невозможно, происходит ошибка компиляции. (Преобразования типов рассматривались в разделе 4.1.4.)

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

Matrix grow( Matrix* p ) { Matrix val; ...

return val;

return. Например:

grow() возвращает вызывающей функции копию значения, хранящегося в переменной val.

Такое поведение можно изменить, если объявить, что возвращается указатель или ссылка. При возврате ссылки выз1вающая функция получает l-значение для val и потому может модифицировать val или взять ее адрес. Вот как можно объявить, что grow() возвращает ссылку:



1 ... 110 111 112 [ 113 ] 114 115 116 ... 395

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