@ Ответ Оли в значительной степени говорит вам, что минимальное , что вам нужно сделать, чтобы ваш код работал. Однако я вижу (и знаю, что даже @Oli видит), что ваша реализация класса имеет много недостатков.
Поскольку вы внедрили FLOAT
, я объясняю вам реализацию Double
(реализация FLOAT
будет аналогичной).
class Double {
double data;
public:
Double (double p=0.0) : data(p){}
double value() { return data; }
Double & operator+=(Double const & other)
{
data += other.data;
return *this;
}
Double & operator-=(Double const & other)
{
data -= other.data;
return *this;
}
//...
};
Обратите внимание, что вам не нужно реализовывать operator=(Double const&)
и Double(Double const&)
. Сгенерированные компилятором будет достаточно. Поскольку конструктор принимает один аргумент типа double
, вам также не нужно реализовывать operator=(double const &)
. Компилятор, сгенерированный копией-семантикой, вместе с конструктором позаботится об этом.
Теперь посмотри на это,
//implement operator+ and operator- as non-member functions
Double operator+(Double a, Double const & b)
{
a += b; //a is local copy, so we can change it
return a;
}
Double operator-(Double a, Double const & b)
{
a -= b; //a is local copy, so we can change it
return a;
}
Обратите внимание, что я реализовал operator+
и operator-
в терминах operator+=
и operator-=
соответственно.
Аналогично, вы можете реализовать operator/=
и operator*=
в качестве функций-членов, а затем реализовать operator/
и operator*
в терминах их!