我无法理解此代码的编译步骤。首先,默认构造函数的用途是什么,为什么会有这么多MyClass类型的对象?link to sololearn where I saved the code
#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;
行的+ operator实现中。此行使用默认构造函数创建对象MyClass
的实例,因此没有默认构造函数,您提供的代码段将无法工作。