gpt4 book ai didi

c++ - 运算符重载的工作原理

转载 作者:太空宇宙 更新时间:2023-11-04 14:45:18 25 4
gpt4 key购买 nike

我有以下代码

class rectangle
{
//Some code ...
int operator+ (rectangle r1)
{
return(r1.length + length);//Length is the 1st argument of r1, r2, r3
}
};

在主函数中

int main()
{
rectangle r1(10,20);
rectangle r2(40,60);
rectangle r3(30,60);
int len = r1 + r3;
}

在这里,如果我们将在 operator+() 中看到,我们正在执行 r1.length + length。编译器如何知道 return 语句中的第二个 length 属于对象 r3 而不是 r1r2 ?我认为答案可能在我们编写的main()

int len = r1 + r3;

如果是这样,那我们为什么要写

operator+ (....) 
{
r1.lenth + lenth; //Why not length + length?
}

为什么不是 length + length?因为编译器已经从 main() 知道 first length 属于 object r12ndobject r3

最佳答案

您将变量名称与参数名称混淆了。在运算符重载中,您将参数命名为 r1:

int operator+(rectangle r1)
{
return(r1.length+length);
}

这意味着无论您传递给 operator + 的什么参数,在操作符的主体内,它都将被命名为 r1(无论其原始名称如何)。

r1.length为参数的长度,length为当前对象的长度(即this->length) .

//Why not length + length?

这只会返回当前对象长度的两倍。

让我们分析一下代码:

rectangle r1(10,20);
rectangle r2(40,60);
rectangle r3(30,60);
int len = r1+r3;

最后一次调用相当于r1.operator+(r3)。在运算符内部,length 代表r1.lengthr1.length 代表r3.length。实际上,甚至不是 r3.length,因为您是按值传递的,并且会创建一个拷贝。通常的语法是:

int operator+(const rectangle& r1)
{
return(r1.length+length);
}

此外,添加矩形 没有任何意义,至少您是如何定义它的。添加两个矩形返回长度之和并不直观。它至少应该返回一个不同的形状。

关于c++ - 运算符重载的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com