Я знаю, что это хорошая идея сделать как можно больше интерфейса класса, не являющегося членом, не другом, и я только что понял, что для моего класса 3D-векторов, 'Vector3', я могу переместить + =, - = и другие операторы вне класса, оставляя только конструкторы и оператор присваивания копии.
Возникает вопрос: как должен выглядеть этот оператор? Я видел канонические формы множества других операторов и следовал их советам, но я не видел канонических форм этих операторов. Я привел то, что, по моему мнению, должно быть ниже.
Второй вопрос: как вообще называются эти операторы? Операторы арифметического присваивания?
(Соответствующий) код перед:
class Vector3 {
public:
Vector3& operator+=(const Vector3& rhs);
float x, y, z;
};
Vector3& Vector3::operator+=(const Vector3 &rhs) {
x += rhs.x;
y += rhs.y;
z += rhs.z;
return *this;
}
Что я изменил до сих пор:
class Vector3 {
public:
float x, y, z;
};
Vector3& operator+=(Vector3& lhs, const Vector3& rhs) {
lhs.x += rhs.x;
lhs.y += rhs.y;
lhs.z += rhs.z;
return lhs;
}