C/C++

Как работает operator+ в C++?

Я не понимаю принцип его работы.
То есть, как я могу сложить 2 объекта?
Object1 = Object2 + Object3;


Class MyClass
{
int x,y;
public:
MyClass(int i, int t) : x(i), y(t) {}
void print()
{
cin >> x;
cin >> y;
}

MyClass operator+(MyClass);
};

MyClass MyClass::operator+(MyClass x2)
{
int h = x2.x + x;
int v = x2.y + y;
return (h,v)
}

Вот какого черта тут нет двух аргументов, а только один? Я не могу понять, откуда он берет второй аргумент, чтобы слепить их вместе. Мне кажется, что предпочтение стоит отдавать функциям, которые можно юзать, чем этот оператор+. Мне он дико наскучил уже.
первый аргумент - это и есть this
ты же в качестве метода перегрузку оператора объявляешь, значит, у него есть доступ к объекту
|...alex@ndr ...|
|...alex@ndr ...|
36 952
Лучший ответ
Евгений Шевченко Я ничего не понимаю.
Вы правы. Бинарные операторы лучше реализовывать с помощью дружественных функций.
 #include 

using namespace std;

class MyClass {
using value_type = int;
value_type x, y;
value_type input(istream& inp, const char* prompt) {
value_type value;
cout > value;
inp.ignore(0x1000, '\n');
return value;
}
friend MyClass operator+(const MyClass& a, const MyClass& b) {
return { a.x + b.x, a.y + b.y };
}
friend ostream& operator
Ж*
Жека *****
66 952
Оператор + в C++ может быть перегружен для работы с объектами пользовательских типов. Это позволяет использовать оператор + для складывания объектов так же, как вы складываете числа или другие встроенные типы данных.

В вашем примере кода, оператор + перегружен для класса MyClass. Определение метода MyClass::operator+ принимает один аргумент типа MyClass. Этот аргумент является правым операндом операции сложения. Левый операнд представлен объектом, для которого вызывается метод operator+. Внутри метода вы можете получить доступ к левому операнду через указатель this.

Таким образом, когда вы используете оператор + для складывания двух объектов типа MyClass, например, в выражении Object1 = Object2 + Object3, то вызывается метод MyClass::operator+ для объекта Object2 с аргументом Object3. Внутри метода operator+ левый операнд (Object2) доступен через указатель this, а правый операнд (Object3) передается как аргумент.
Олег Мешков
Олег Мешков
25 860
Метод класса имеет доступ к полям класса, да, но еще у него есть указатель this на объект класса для которого был вызван метод.
Операторы в С++ могут быть перегружены как методы класса или как просто функции (не все). https://en.cppreference.com/w/cpp/language/operators