有人可以解释我在CVector CVector :: operator +(CVector param)中做了什么。点运算符如何与temp一起工作。我理解当你做object.function()但是如何做object.object这样做只是将它们设置为彼此相等?混淆!!
#include <iostream>
using namespace std;
class CVector {
public:
int x,y;
CVector () {};
CVector (int,int);
CVector operator + (CVector);
};
CVector::CVector (int a, int b) {
x = a;
y = b;
}
CVector CVector::operator+ (CVector param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return (temp);
}
int main () {
CVector a (3,1);
CVector b (1,2);
CVector c;
c = a + b;
cout << c.x << "," << c.y;
return 0;
}
答案 0 :(得分:3)
这称为operator overloading。在这种情况下它正在做的是允许你将两个CVector对象一起添加,如main
函数所示。
当主要功能发生a + b
时,operator+
对象的a
方法被调用,b
为param
。因此,它构造了一个temp
对象,它组合了两者的坐标,并将其返回。
ETA:重读你的问题,我想你可能也会问这行
temp.x = x + param.x;
装置。请注意,C ++对象不仅具有可以调用的函数(如object.function()
),它们还具有成员,这些成员本身就是可以访问和更改的变量。在这种情况下,x
和y
是属于CVector
类的整数。仔细阅读this tutorial。
答案 1 :(得分:0)
我想你问的是以下几点:
temp.x = x + param.x;
temp.y = y + param.y;
在这种情况下,.
运算符只是访问临时CVector
对象的成员。
您会在class CVector
中看到您有公共实例成员x
和y
。然后,CVector对象的每个实例都有自己的x和y int
变量。
class CVector {
public:
int x,y;
...
}
所以temp.x访问读取或赋值的方式与访问代码块中任何其他局部变量的方式相同:
void SomeCalc(CVector temp){
int sum;
int z = 1;
temp.x = 2;
sum = z + temp.x; // sum now equals 3
}