Я знаю, что это хорошая идея - создать как можно большую часть интерфейса класса, не являющегося членом, не являющегося другом, и я только что понял, что для моего векторного трехмерного класса, 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;
}