当值传递给C++中的运算符重载函数时会发生什么

What happens when value is passed to operator overloader function in C++?

本文关键字:函数 什么 重载 运算符 值传 C++      更新时间:2023-10-16

我没有理解编译这段代码的步骤。首先,默认构造函数的用途在哪里?为什么有这么多MyClass类型的对象?链接到sololearn我保存代码的地方

#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;
//'this' is refering to active (obj1)
return res; 
}
};
int main() {
MyClass obj1(12), obj2(55);
MyClass res = obj1+obj2;
cout << res.var;
}
//I've not understood, its from a lesson

如果您怀疑不需要一段代码,请尝试在没有它的情况下进行编译,您很快就会知道您的怀疑是否正确。

当您删除您提供的类中的默认构造函数时,会发生以下情况:

..Playground: In member function 'MyClass MyClass::operator+(MyClass&)':
..Playground:11:21: error: no matching function for call to 'MyClass::MyClass()'
MyClass res;
^~~
..Playground:7:9: note: candidate: MyClass::MyClass(int)
MyClass(int a)
^~~~~~~
..Playground:7:9: note:   candidate expects 1 argument, 0 provided
..Playground:4:7: note: candidate: constexpr MyClass::MyClass(const MyClass&)
class MyClass {

也就是说,问题出现在线路MyClass res;上的+运算符实现中。这一行使用默认构造函数创建对象MyClass的实例,因此您提供的代码片段在没有默认构造函数的情况下是不可能工作的。

不带参数的构造函数用于不传递任何值的对象,即存储两个操作数对象之和的对象---简单的