Закінчимо вивчення перезавантаження бінарних операцій на прикладі арифметичного присвоювання +=. Ця операція виконує присвоювання і додавання одночасно. Ми будемо використовувати цю операцію для додавання інтервалів, записуючи результат у змінну, що означає перший інтервал. Приведемо лістінг програми 10.9 (базується на програмі 10.7)
#include <iostream.h>
#include <conio.h>
#include <bios.h>
class Distance
{private:
int feet;
float inches;
public:
Distance():feet(0),inches(0.0) //Конструктор без аргументів
{ }
//Конструктор з 2 аргументами
Distance(int ft,float in):feet(ft),inches(in)
{ }
void getdist()
{cout <<”\nВведіть число футів “; cin >>feet;
cout << “Дюймів “; cin>>inches;
}
void showdist()
{cout <<feet << “\’ “<< inches <<”\’’”;}
Distance operator+(Distance) const;
int operator<(Distance) const;
void operator+= (Distance);
};
//Додавання d2 I d3
Distance Distance::operator+(Distance d2) const
{
int f=feet+d2.feet;
float i=inches+d2.inches;
if(i>=12.0)
{i-=12.0;
f++;}
return Distance(f,i);
}
int Distance::operator<(Distance d2) const
{float bf1=feet+inches/12;
float bf2=d2.feet+d2.inches/12;
return (bf1<bf2)?1:0;
}
void Distance::operator+=(Distance d2)
{feet+=d2.feet;
inches+=d2.inches;
if (inches>=12.0)
{inches-=12.0;
feet++;
}
}
int main()
{
clrscr();
Distance dist1;
dist1.getdist();
cout<<”\ndist1=”;dist1.showdist();
Distance dist2(11,6.25);
cout<<”\ndist2=”;dist2.showdist();
dist1+=dist2;
cout<<”\nПісля операції:”;
cout<<”\ndist1=”;dist1.showdist();
cout<<endl;
bioskey(0);
return 0;
}
Програма 10.9
Зауважимо, що у функції operator+=() цієї програми об’єктом, що приймає значення суми, є об’єкт, який викликає цю функцію. Тому feet та inches є заданими величинами, а не тимчасовими змінними, які використовуються тільки для повернутого об’єкту. Функція operator+=() не повертає жодного значення і має тип void. Але, якщо ми захочемо використати цю операцію в складніших виразах, таких як
dist=dist1+=dist2;
то нам буде потрібне значення, яке повертається. Ми можемо ввести його, записавши в кінці визначення функції operator+=() рядок
return Distance(feet, inches);
в якій безіменний об’єкт ініціалізується тим самим значенням, що й об’єкт, який викликає функцію, і потім повертається.