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

问题描述 投票:-2回答:1

我无法理解此代码的编译步骤。首先,默认构造函数的用途是什么,为什么会有这么多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
c++ class operator-overloading
1个回答
0
投票

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

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

..\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的实例,因此没有默认构造函数,您提供的代码段将无法工作。

© www.soinside.com 2019 - 2024. All rights reserved.