鱼C论坛

 找回密码
 立即注册
查看: 753|回复: 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
#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

为什么必须要加const啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 18:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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