2

有人可以解释一下 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;
 }
4

2 回答 2

3

这称为运算符重载。在这种情况下,它允许您将两个 CVector 对象添加在一起,如main函数所示。

a + bmain 函数中发生时,调用对象的operator+方法,以. 因此,它构造了一个结合两者坐标的对象,并将其返回。abparamtemp

ETA:重读你的问题,我想你可能也在问什么

temp.x = x + param.x;

方法。请注意,C++ 对象不仅具有可以调用的函数(如object.function()),它们还具有成员,这些成员本身就是可以访问和更改的变量。在这种情况下,xy是属于CVector该类的整数。仔细阅读本教程。

于 2012-05-16T02:36:14.483 回答
0

我想你在问以下问题:

temp.x = x + param.x;
temp.y = y + param.y;    

在这种情况下,.操作员只访问临时CVector对象的成员。

您会在您的文件中看到class CVector您拥有公共实例成员xy. CVector 对象的每个实例都有自己的 x 和 yint变量。

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
}
于 2012-05-16T02:40:22.753 回答