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

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

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

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

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

Передача параметров по ссылке - student2.ru

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

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;

Передача параметров по ссылке - student2.ru

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

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

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

 
  Передача параметров по ссылке - student2.ru

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

 
  Передача параметров по ссылке - student2.ru

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

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

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

 
  Передача параметров по ссылке - student2.ru

float а

Передача параметров по ссылке - student2.ru Передача параметров по ссылке - student2.ru

float b void

Передача параметров по ссылке - student2.ru Передача параметров по ссылке - student2.ru

float c

Передача параметров по ссылке - student2.ru

Передача параметров по ссылке - student2.ru 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);

Наши рекомендации