Главная->Інформатика та програмування->Содержание->Усложненный вариант передачи по ссылке

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн

Усложненный вариант передачи по ссылке

Здесь мы приведем пример, демонстрирующий менее очевидное применение ме- ханизма передачи аргументов по ссылке. Представьте ситуацию, когда вашей программе необходимо работать с парами чисел, упорядоченными по возраста-

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

// reforder.cpp

// упорядочивает по возрастанию пары чисел #include  <iostream> using namespace std;

int main() {

void order( int&, int& );               // прототип

int n1=99, n2=11;            // неупорядоченная пара

int n3=22, n4=88;            // упорядоченная пара

order(n1,n2);    // упорядочивание обеих пар

order(n3,n4);   

cout << "n1=" << n1<< endl;      // вывод результатов

cout << "n2=" << n2 << endl;

cout << "n3=" << n3 << endl;

cout << "n4=" << n4 << endl;

return 0;

}

//--------------------------------------------------------

void order( int& numb1, int& numb2 ) // упорядочивает два числа {

if( numb1 > numb2 )      // если первое число больше второго.

{

int temp = numb1;         // то меняем их местами

numb1 = numb2; numb2 = temp;

}

}

В функции main() две пары чисел, причем первая из них не упорядочена, а вто- рая — упорядочена. Функция order() обрабатывает каждую из этих пар, после чего результат выводится на экран. По результату работы программы мы видим, что значения первой пары поменялись местами, в то время как значения второй пары остались на своих местах:

n1=11 n2=99 nЗ=22 n4=88

Параметры функции order() имеют имена numb1 и numb2. В случае, если зна- чение numb1 оказывается больше numb2, значение numb1 копируется в перемен- ную temp, на его место записывается значение numb2, и затем значение перемен- ной temp копируется в numb2. Обратите внимание на то, что имена numb1 и numb2 указывают на физически различные переменные, в то время как аргумен- ты функции могут быть и одинаковыми. При первом вызове функции order() упорядочивается пара значений n1 и n2, а при втором вызове — пара значений n2 и n3. Таким образом, действие программы заключается в проверке упорядо- ченности исходных значений и, при необходимости, их сортировке.

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

 

20