ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В 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. Таким образом, действие программы заключается в проверке упорядо- ченности исходных значений и, при необходимости, их сортировке.
Ссылочный механизм напоминает устройство дистанционного управления: вызывающая программа указывает функции переменные, которые нужно обра- ботать, а функция обрабатывает эти переменные, даже не зная их настоящих имен. Это выглядит примерно так, как если бы вы наняли работников, чтобы сделать ремонт в своей комнате, и они, не приходя к вам домой, красили, бели- ли и выполняли другую необходимую работу.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
