【问题标题】:What happens when value is passed to operator overloader function in C++?将值传递给 C++ 中的运算符重载函数时会发生什么?
【发布时间】:2019-11-20 16:30:48
【问题描述】:

我没看懂这段代码的编译步骤。 首先,默认构造函数的目的是什么,为什么有这么多 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】:

如果您怀疑自己不需要一段代码,请尝试不使用它进行编译,您很快就会知道您的怀疑是否正确。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多