ZeroTw 发表于 2020-4-29 18:32:45

关于重载的问题!!!

帮我解释一下错误的原因,要怎么改
#include<iostream>
using namespace std;
class zerotwo
{
public:
        zerotwo()
        {
                i = 1;
        }
        zerotwo operator*(zerotwo& right)
        {
                zerotwo temp;
                temp.i = i * right.i;
                return temp;
        }
        zerotwo operator=(zerotwo& right)
        {
                i = right.i;
        }
        int i;
};
int main()
{
        zerotwo p1;
        zerotwo p2;
        p1 = p1 * p2;《------这里错了
}

人造人 发表于 2020-4-29 18:39:34

#include<iostream>

using namespace std;

class zerotwo
{
public:
    zerotwo()
    {
      i = 1;
    }
    zerotwo operator*(zerotwo& right)
    {
      zerotwo temp;
      temp.i = i * right.i;
      return temp;
    }
    zerotwo &operator=(const zerotwo& right)
    {
      i = right.i;
      return *this;
    }
    int i;
};

int main()
{
    zerotwo p1;
    zerotwo p2;
    p1 = p1 * p2;
}

ZeroTw 发表于 2020-4-29 18:54:37

人造人 发表于 2020-4-29 18:39


为什么必须要加const啊

人造人 发表于 2020-4-29 18:56:15

ZeroTw 发表于 2020-4-29 18:54
为什么必须要加const啊

因为 p1 + p2 是一个临时对象

#include<iostream>

using namespace std;

class zerotwo
{
public:
    zerotwo()
    {
      i = 1;
    }
    zerotwo operator*(zerotwo& right)
    {
      zerotwo temp;
      temp.i = i * right.i;
      return temp;
    }
    zerotwo &operator=(zerotwo& right)
    {
      i = right.i;
      return *this;
    }
    int i;
};

int main()
{
    zerotwo p1;
    zerotwo p2;
    p1 = p2;
}

人造人 发表于 2020-4-29 18:59:21

#include <iostream>

int main() {
    int a = 10, b = 11;
    int &ra = a, &rb = b;   // ok
    //int &rc = a + b;      // error
    const int &rc = a + b;// ok
    return 0;
}

ZeroTw 发表于 2020-4-29 19:15:48

人造人 发表于 2020-4-29 18:56
因为 p1 + p2 是一个临时对象

好的
页: [1]
查看完整版本: 关于重载的问题!!!