Kvector::Kvector(float x, float y, float z) : x(x), y(y),z(z) {};
Kvector& Kvector::operator+(const Kvector& other) {
return Kvector(x + other.x, y + other.y, z + other.z);
};
Kvector& Kvector::operator*(const Kvector& other) {
return Kvector((x == 0) ? 0 : x*other.x,
(y == 0) ? y * other.y : 0,
(z == 0) ? 0 : z * other.z);
};
Kvector& Kvector::operator*(const float other) {
return Kvector(x * other, y * other, z * other);
};
void Kvector::operator+=(const Kvector& other) {
x += other.x;
y += other.y;
z += other.z;
};
上記は、Kvector(float xyzを使用した構造体、3つの単純なオブジェクト、それだけです)と呼ばれる構造体の演算子の定義です。
コードの私の理解が正しければ、次のコードは292929を出力するはずです。そしてそれはそうします。
Kvector a(1,1,1);
a = a*29;
cout<<"poss "<<a.x << " "<<a.y<< " "<< a.z<<endl;
しかし、私が試してみると
Kvector a(1,1,1);
a += a*29;
cout<<"poss "<<a.x << " "<<a.y<< " "<< a.z<<endl;
なんらかの理由で111を出力します。そこで、代わりに以下のコードを試しました。
Kvector a(1,1,1);
a = a+ a*29;
cout<<"poss "<<a.x << " "<<a.y<< " "<< a.z<<endl;
上記のコードは次のように出力します
poss -1.07374e + 008 -1.07374e + 008 -1.07374e + 008
a =(1,1,1)+(1,1,1)* 29 =(1,1,1)+(29、29,29)=(30,30、 30)
この振る舞いについての説明をいただければ幸いです。私の質問を読んでいただきありがとうございます。