Передача параметров по ссылке

 

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

А если результатов работы вызываемой функции больше чем одно?

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

Что же это за параметры? Для этого изучим новый производный тип – ссылка на тип

 

 

 

Имя типа «ссылка на тип» составляется из имени_типа и символа '&',например:

int& float& char&

Говорят «ссылка на int», «ссылка на float», «ссылка на char».

Этот тип определяет не новый объект, а новое альтернативное имя уже существующего объекта. Этот тип не создает новый объект, а уже созданному объекту дает второе имя.

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

Создадим следующие объекты инструкциями их определения:

int a = 3, b = 4;

float f;

char s1,s2;

Объектам a, f, и s2 определены (даны) новые имена в следующих инструкциях:

int& aNew = a;

float& F = f;

char& ss2 = s2;

Теперь к этим объектам можно обратиться по любому из двух имен. Обращения будут равносильны.

aNew = b; f = 1.77; F = f - 1; ss2 = ‘w‘; s1 = s2;

Так использовать ссылки – экзотика. Да и зачем? Свойства и возможности ссылок на тип чаще всего используют в списке формальных параметров функции для организации обмена данными.

 

 

Рассмотрим задачу – пример 2, сделав другую реализацию уже рассмотренной задачи.

 

Составить функцию countX, которая, получив а, b и с через параметры по значению, вычисляет х и возвращает результат его вычисления через параметр по ссылке (откажемся от уже рассмотренной возможности возвращать результат через возвращаемое значение).

 

 
 

В функции main ввести значения a, , . Используя функцию countX, вычислить значение X и выдать на экран.

 

 
 

 

В функции main не использовать стандартные математические функции.

 

Для того, чтобы вычислить требуемый результат, функция countX должна получить с по значению три параметра а, b и с, тип каждого значения float. В этой реализации функция результат вернет не через возвращаемое значение, тип которого теперь void. В списке ее формальных параметров появляется параметр x, тип которого float&.

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

 
 


float а

float b void

float c


float& x

Заголовок функции countX, реализуемой в таком виде, должен быть таким:

float countX (float a, float b, float c, float& x )

 

 

Файл example3.cpp

Define _USE_MATH_DEFINES

#include <math.h>

#include <iostream>

#include <conio.h>

using namespace std;

void countX (float a, float b, float c, float& x )

{

x= (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b);