Я думаю, что ваши реализации операторов не будут делать то, что вы хотите.Например:
FLOAT f1; f1.setFloat(1.0);
FLOAT f2; f2.setFloat(2.0);
FLOAT f3;
f3 = f1 + f2;
Если вы измените оператор + (), например, чтобы вернуть FLOAT, у вас все равно будет эффект, что после сложения f1 и f3 будут равны 3,0;
Обычно используемая идиома заключается в реализации таких операторов, как + = в классе, и таких операторов, как + вне класса.Например:
class FLOAT {...
FLOAT& operator+=(const FLOAT& f)
{
x += f.x;
return *this;
}
};
...
FLOAT operator+(const FLOAT& f1, const FLOAT& f2)
{
FLOAT result(f1);
f1 += f2;
return f1;
}
Дополнительным преимуществом этого является то, что вы также можете легко добавлять другие операторы, такие как
FLOAT operator+(int x, const FLOAT& f);
FLOAT operator+(double x, const FLOAT& f);
Выполнениетщательная работа над таким классом является хорошей практикой, когда вы хотите выполнять эту работу с более интересными типами, такими как комплексные числа или матрицы.Не забудьте добавить операторы сравнения, конструктор копирования, деструктор и операторы присваивания для полноты.Удачи!