Для чего использовать operator
Я пытаюсь понять смысл перегрузки операторов но никак не могу.
Есть код
#include <iostream>
class Counter
{
public:
Counter(int sec)
{
seconds = sec;
}
void display()
{
std::cout << seconds << "<-SECONDS" << std::endl;
}
int seconds;
};
Counter operator + (Counter c1, Counter c2)
{
return Counter(c1.seconds + c2.seconds);
}
void main()
{
Counter c1(20);
Counter c2(90);
Counter c3 = c1 + c2;
c3.display();
}
В этом коде у меня возникает вопрос для чего использовать оператор если можно в main()
Сделать Counter c3 = c1.seconds + c2.seconds и код будет прекрасно работать без перегрузки операторов.
Для чего тогда нужен оператор?
Ответы (2 шт):
познакомьтесь с понятиями инкапсуляции и абстракции, потому что вызов оператора может чуть ли не ракету запускать, даже на простом примере вот, как просто сложить комплексные числа и вывести их с перегрузками, не заглядывая во внутреннюю реализацию:
#include <iostream>
class Complex
{
private:
int x, y;
public:
Complex(int x, int y) { this->x = x;this->y = y; }
friend Complex operator+(const Complex& lhs, const Complex& rhs) {
return Complex(lhs.x + rhs.x, lhs.y + rhs.y);
}
friend std::ostream& operator<<(std::ostream& out, const Complex& complex) {
std::cout << complex.x << "+i" << complex.y;
return out;
}
};
int main()
{
Complex a(1, 3);
Complex b(2, 4);
Complex c = a + b;
std::cout << c;
return 0;
}
Логика работы сложения объектов произвольных типов может быть много сложнее, чем просто сложить два члена. Так вот внутри оператора её и необходимо инкапсулировать. Чтобы используя объекты класса можно было просто писать c3 = c1 + c2 и не задумываться о деталях.