鱼C论坛

 找回密码
 立即注册
查看: 983|回复: 5

[已解决]关于重载的问题!!!

[复制链接]
发表于 2020-4-29 18:32:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
帮我解释一下错误的原因,要怎么改
#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
  1. #include<iostream>

  2. using namespace std;

  3. class zerotwo
  4. {
  5. public:
  6.     zerotwo()
  7.     {
  8.         i = 1;
  9.     }
  10.     zerotwo operator*(zerotwo& right)
  11.     {
  12.         zerotwo temp;
  13.         temp.i = i * right.i;
  14.         return temp;
  15.     }
  16.     zerotwo &operator=(const zerotwo& right)
  17.     {
  18.         i = right.i;
  19.         return *this;
  20.     }
  21.     int i;
  22. };

  23. int main()
  24. {
  25.     zerotwo p1;
  26.     zerotwo p2;
  27.     p1 = p1 * p2;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 18:39:34 | 显示全部楼层    本楼为最佳答案   
  1. #include<iostream>

  2. using namespace std;

  3. class zerotwo
  4. {
  5. public:
  6.     zerotwo()
  7.     {
  8.         i = 1;
  9.     }
  10.     zerotwo operator*(zerotwo& right)
  11.     {
  12.         zerotwo temp;
  13.         temp.i = i * right.i;
  14.         return temp;
  15.     }
  16.     zerotwo &operator=(const zerotwo& right)
  17.     {
  18.         i = right.i;
  19.         return *this;
  20.     }
  21.     int i;
  22. };

  23. int main()
  24. {
  25.     zerotwo p1;
  26.     zerotwo p2;
  27.     p1 = p1 * p2;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 18:54:37 | 显示全部楼层

为什么必须要加const啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 18:56:15 | 显示全部楼层
ZeroTw 发表于 2020-4-29 18:54
为什么必须要加const啊

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

  1. #include<iostream>

  2. using namespace std;

  3. class zerotwo
  4. {
  5. public:
  6.     zerotwo()
  7.     {
  8.         i = 1;
  9.     }
  10.     zerotwo operator*(zerotwo& right)
  11.     {
  12.         zerotwo temp;
  13.         temp.i = i * right.i;
  14.         return temp;
  15.     }
  16.     zerotwo &operator=(zerotwo& right)
  17.     {
  18.         i = right.i;
  19.         return *this;
  20.     }
  21.     int i;
  22. };

  23. int main()
  24. {
  25.     zerotwo p1;
  26.     zerotwo p2;
  27.     p1 = p2;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 18:59:21 | 显示全部楼层
  1. #include <iostream>

  2. int main() {
  3.     int a = 10, b = 11;
  4.     int &ra = a, &rb = b;   // ok
  5.     //int &rc = a + b;      // error
  6.     const int &rc = a + b;  // ok
  7.     return 0;
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 19:15:48 | 显示全部楼层
人造人 发表于 2020-4-29 18:56
因为 p1 + p2 是一个临时对象

好的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表