gpt4 book ai didi

c++ - 运算符重载和复制构造函数 - C++

转载 作者:行者123 更新时间:2023-11-27 23:23:06 25 4
gpt4 key购买 nike

请花点时间查看下面的代码并回答我的相关问题

class Vector
{
public:
int x, y;
/* Constructor / destructor / Other methods */
Vector operator + (Vector & OtherVector);
Vector & operator += (Vector & OtherVector);
};

Vector Vector::operator + (Vector & OtherVector) // LINE 6
{
Vector TempVector;
TempVector.x = x + OtherVector.x;
TempVector.y = y + OtherVector.y;
return TempVector;
}

Vector & Vector::operator += (Vector & OtherVector)
{
x += OtherVector.x;
y += OtherVector.y;
return * this;
}

Vector VectorOne;
Vector VectorTwo;
Vector VectorThree;

/* Do something with vectors */
VectorOne = VectorTwo + VectorThree;
VectorThree += VectorOne;

这段代码是从一本书上摘下来的,但里面没有很好地解释。具体来说,我无法理解第 6 行的程序。构造函数和运算符均未重载。请解释运算符重载和复制构造函数如何在此程序中工作。

编辑:我们为什么要使用引用运算符?

最佳答案

6:   Vector operator + (Vector & OtherVector);
7: Vector & operator += (Vector & OtherVector);

那些声明运算符重载。它们是必要的,以表明您确实想要重载运算符。有关以下返回值的更多信息:

10: Vector Vector::operator + (Vector & OtherVector)
11: {
12: Vector TempVector;
13: TempVector.x = x + OtherVector.x;
14: TempVector.y = y + OtherVector.y;
15: return TempVector;
16: }

返回 TempVector 的拷贝,其中添加了 vector 的 x 和 y 分量。这允许以下用法(前提是赋值运算符也已定义:

24: Vector VectorOne;
25: Vector VectorTwo;
26: Vector VectorThree;
27: /* Do something with vectors */
28: VectorOne = VectorTwo + VectorThree;

17: Vector & Vector::operator += (Vector & OtherVector)
18: {
19: x += OtherVector.x;
20: y += OtherVector.y;
21: return * this;
22: }

这个与上面的相同,只是我们添加到调用实例而不是临时变量的细微差别。这导致返回 *thisthis 是指向该类当前实例的指针,因此为了获得它的值,您需要使用星号解引用运算符(如果我对运算符的名称有误,请纠正我)。

关于c++ - 运算符重载和复制构造函数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456418/

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