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 的 struct 的运算符定义(带有 float xyz 的 struct,三个简单对象,仅此而已)。
如果我对代码的理解是正确的,下面的代码应该打印 29 29 29。它确实如此。
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;
由于某种原因,它会打印 1 1 1 。所以我尝试了下面的代码。
Kvector a(1,1,1);
a = a+ a*29;
cout<<"poss "<<a.x << " "<<a.y<< " "<< a.z<<endl;
上面的代码打印以下内容
位置 -1.07374e+008 -1.07374e+008 -1.07374e+008
我希望它打印 30 30 30 因为 a= (1,1,1) + (1,1,1) * 29 = (1,1,1) + ( 29, 29,29) = (30,30, 30)
我将非常感谢对此行为的解释。感谢您阅读我的问题。