Для чего нужно возвращаемое значение в перегрузки операторов?
Всем привет! Не могу никак разобраться с перегрузкой операторов в C++.
Есть некоторый код, который я хочу привести в пример, его я добыл на одном из ресурсов, где объяснялась тема перегрузки операторов:
#include <iostream>
using namespace std;
class MyClass {
public:
int var;
MyClass() { }
MyClass(int a)
: var(a) { }
MyClass operator+(MyClass &obj) {
MyClass res;
res.var= this->var+obj.var;
return res;
}
};
int main() {
MyClass obj1(12), obj2(55);
MyClass res = obj1+obj2;
cout << res.var;
}
В данном коде, по моей точке зрения, происходит следующее:
Строка MyClass obj1(12), obj(55); инициализирует объекты obj1 и obj2, а так же по порядку передаёт значения 12 и 55 в член класса var(a), тем самым присваивая члену var эти значения для каждого отдельного объекта.
Далее, Строка MyClass res = obj1+obj2; выполняет сразу несколько операций, первой выполняется часть obj1+obj2;, которая передаётся в данную часть кода:
MyClass operator+(MyClass &obj) {
MyClass res;
res.var= this->var+obj.var;
return res;
}
};
И вот именно в этой части кода я начинаю задаваться вопросом, а зачем нам возвращаемое значение return res;? По моей логике, мы здесь перегружаем оператор + и записываем результат в член класса var, с помощью записи res.var. Если это не так, то поправьте меня. Дальше у меня начинают появляться ещё вопросы. Зачем мы возвращаем return res;? Что находится в res, результат выполнения операции сложения? Просто, если он передаёт результат операции сложения, то разве не логичнее сделать возвращаемое значение таким return res.var? Я пробовал такую запись и результат был таким же. Однако, на этом я не остановился и решил вовсе убрать возвращаемое значение из данного блока кода. Когда я его убрал, результат на мое удивление тоже не поменялся! Почему результат все равно вывелся таким же? А когда я решил написать return 0;, то вывелся 0. Хотя 0 это же совершенно другой тип данных? Во первых, как он вообще передался, ведь там тип данных MyClass должен быть, а во вторых, почему вывелся 0, если при удалении return, результат вывода не менялся?