Лекция: Параметры ссылочного типа

 

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

· в заголовке функции параметры-результаты (в нашем примере y, z) записываем как переменные ссылочного типа, то есть с символом &;

· в тексте функции никакие дополнительные операции, а значит, и символы, для этих переменных не используем, то есть работаем, как с обычными переменными;

· при вызове функции в качестве фактических параметров, указываем простые переменные соответствующего типа (cs, sn), объявленные обычным образом;

· входные параметры-значения используются по тем же правилам (см. §1);

· вызов функции типа void с несколькими результатами осуществляется как вызов функции типа void без результата, то есть отдельно, а не в выражении (см.§1).

Почему полученное значение возвращается в вызывающую функцию? Мы уже знаем, что с помощью ссылочного типа определяется другое имя ячейки. Поэтому для формального (y) и фактического (cs) параметров отводится одна и та же ячейка, которая в функции SINCOS называется y, а при вызове в головной функции — cs. Поэтому если в функции получим y, то этим самым определим и значение cs, то есть полученное в функции значение возвращается в вызывающую функцию просто с другим именем. При этом никакого копирования не выполняется. Аналогично для переменных z и sn также резервируется одна и таже ячейка оперативной памяти.

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

void CHANGE (float &u, float &v)

{ float temp=u; u=v; v=temp; }

Тогда вызвать её можно, например, так:

float a=1.1, b=2.2; CHANGE( a, b);

Так как a и u — это два имена одной и той же ячейки благодаря ссылочному типу, то изменение u с 1.1 на 2.2 автоматически приведёт к изменению переменной a. Аналогично изменится и переменная b,если изменили значение переменной v. И тогда оператор cout<<a<<” “<<b; после вызова функции выведет изменённые значения 2.2 и 1.1, полученные в результате их перестановки. Заметим, однако, что если бы заголовок функции записать без ссылочного типа void CHANGE (float u, float v); то программа будет не только компилироваться, но и выполняться. Но при этом в функции u иv будут переставлены, но это изменение не передаётся в вызывающую функцию для a и b, то есть эти переменные не изменятся.

 

еще рефераты
Еще работы по информатике