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

これは、演算子のオーバーロードと呼ばれます。この場合、関数で示されているように、2 つの CVector オブジェクトを一緒に追加できるようになっていmainます。

a + bメイン関数で発生すると、オブジェクトのメソッドが呼び出さoperator+れ、. このようにして、2 つの座標を組み合わせたオブジェクトを構築し、それを返します。abparamtemp

ETA: あなたの質問を読み返してみると、あなたは何の行を尋ねているのかもしれません。

temp.x = x + param.x;

意味。C++ オブジェクトには、呼び出すことができる関数 ( などobject.function()) があるだけでなく、アクセスして変更できる変数であるメンバーがあることに注意してください。この場合、xandはクラスyに属する int です。このチュートリアルをよくCVector読んでください。

于 2012-05-16T02:36:14.483 に答える
0

次のことについて質問されていると思います。

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

この場合、オペレーターは一時オブジェクト.のメンバーにアクセスするだけです。CVector

class CVectorに public インスタンス メンバーxとがあることがわかりますy。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 に答える