Ми розглянули різні приклади використання операції + для додавання інтервалів та об’єднання рядків. Можна використовувати обидва написані нами класи в одній програмі, при цьому компілятор знатиме, яка з функцій нам потрібна, оскільки він вибирає функцію, виходячи з операндів операції. Нагадаємо, що таке явище є проявом принципу поліморфізму.
Операції порівняння
Розглянемо перезавантаження операцій іншого типу, а саме операцій порівняння.
Порівняння об’єктів класу Distance
Перезавантажимо операцію «менше ніж» (<) в класі Distance для того, щоб мати можливість порівнювати об’єкти цього класу. Приведемо лістінг програми 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) //Конструктор без аргументів
{ }
//Конструктор з двома аргументами
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;
};
//dodavanna 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;
}
int main()
{
clrscr();
Distance dist1,dist3,dist4;
dist1.getdist();
Distance dist2(11,6.25);
dist3=dist1+dist2;
dist4=dist1+dist2+dist3;
cout <<”\ndist1=”;dist1.showdist();
cout << “\ndist2=”;dist2.showdist();
cout << “\ndist3=”;dist3.showdist();
cout << “\ndist4=”;dist4.showdist();
cout <<endl;
if (dist1<dist2)
cout<<”\ndist1<dist2”;
else
cout<<”\ndist1>=dist2”;
cout <<endl;
bioskey(0);
return 0;
}
Програма 10.7
Програма порівнює інтервал, заданий користувачем, з інтервалом, визначеним у програмі. Залежно від одержаного результату, на екран виводиться одне з двох речень. Оскільки у використовуваному нами компіляторі відсутній булівський тип даних, а істинним вважається всякий числовий вираз, відмінний від 0, ми у випадку , коли порівння виконується, повертаємо 1, а іншому випадку – 0.