ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн
Операции арифметического присваивания
Давайте закончим наше изучение перегрузки бинарных операций на примере арифметического присваивания: +=. Вспомним, что эта операция выполняет при- сваивание и сложение за один шаг. Мы будем использовать эту операцию для сложения интервалов, записывая результат в переменную, обозначающую пер- вый интервал. Это похоже на пример ENGLPLUS, представленный нами ранее, но здесь есть небольшое отличие. Приведем листинг программы ENGLPLEQ.
// engpleq.cpp // перегрузка операции += #include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class Distance // класс английских мер длины
{
private:
int feet;
float inches;
public:
// конструктор без параметров
Distance ( ) : feet ( 0 ), inches ( 0.0 )
{ }
// конструктор с двумя параметрами
Distance ( int ft, float in ) : feet ( ft ), inches ( in )
{ }
// получение информации от пользователя
void getdist ( )
{
cout << "\nВведите футы: "; cin >> feet;
cout << "Введите дюймы: "; cin >> inches;
}
// показ информации
void showdist() const
{ cout << feet << "\'-" << inches << '\"'; }
// сложение с присвоением
void operator += ( Distance );
};
///////////////////////////////////////////////////////////
void Distance::operator+= ( Distance d2 )
{
feet += d2.feet; // складываем футы
inches += d2.inches; // складываем дюймы
if ( inches >= 12.0 ) // если дюймов больше 12
{
inches -= 12.0; // то уменьшаем дюймы на 12
feet++; // увеличиваем футы на 1
}
}
///////////////////////////////////////////////////////////
int main ( )
{
Distance dist1; // определяем переменную
dist1.getdist ( ); // и вводим информацию
cout << "\ndist1 = "; dist1.showdist ( );
Distance dist2 ( 11, 6.25 ); // описываем и инициализируем другую переменную
cout << "\ndist2 = "; dist2.showdist ( );
dist1 += dist2; // dist1 = dist1 + dist2
cout << "\nПосле добавления:";
cout << "\ndist1 = "; dist1.showdist ( );
cout << endl;
return 0;
}
В этой программе мы получаем интервал от пользователя и складываем его со вторым интервалом, инициализированным в программе как 11'-6.25". Пример простого взаимодействия с программой:
Введите футы: 3 Введите дюймы: 5.75 dist1 = 3'-5.75" dist2 = 11'-6.25" После добавления: dist1 = 15'-О"
В этой программе сложение выполняется в функции main() в строке
dist1 += dist2;
Это означает, что сумма интервалов dist1 и dist2 будет записана в перемен- ную dist1.
Заметим, что существует различие между функцией operator+=(), использу- емой здесь, и функцией operator+() из программы ENGLPLUS. В функции operator+() создается новый объект типа Distance, который будет затем возвращен функци- ей, чтобы быть присвоенным третьему объекту типа Distance:
dist3 = dist1 + dist2;
В функции operator+=() программы ENGLPLEQ объектом, принимающим значе- ние суммы, является объект, вызывающий функцию operator+=(). Поэтому feet и inches являются заданными величинами, а не временными переменными, исполь- зуемыми только для возвращаемого объекта. Функция operator+=() не имеет воз- вращаемого значения: она возвращает тип void. Для операции += возвращаемое значение не требуется, так как мы не присваиваем ее результат никакой пере- менной. Эта операция используется без возвращаемого значения в выражениях, похожих на выражение из нашей программы:
dist1 += dist2;
Но если мы захотим использовать эту операцию в более сложных выражени- ях, таких, как:
dist3 = dist1 += dist2;
то в этом случае нам понадобится возвращаемое значение. Мы можем ввести его, записав в конце определения функции operator+=() строку
return Distance ( feet, inches );
в которой безымянный объект инициализируется тем же значением, что и объ- ект, вызывающий функцию, и затем возвращается.
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
Схожі підручники
- Загальні питання з курсу Економіка підприємства
- Управління проектами (частина 2)
- Продажи и управление продажами Учеб. пособие для вузов (часть 2) (онлайн)
- Методичні вказівки до виконання практичного заняття на тему «Графічний метод розв’язку задач НЛП» Розв’язати графічним методом задачу НЛП
- Загальні питання з курсу Історія економіки та економічної думки (частина 1)
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
