Вы должны работать с streams
, а не strings
. Если пользователь хочет вводить / выводить в / из string
, он всегда может использовать stringstream
. Обратите внимание, что ваше определение
istream& operator>>(istream& in,const Fraction& input)
, что на языке потоков означает извлечение Fraction
из istream
, поэтому ваш входной параметр не должен быть постоянным. С другой стороны, для вывода Fraction
в ostream
нужно объявить
ostream& operator<<(ostream& in,const Fraction& input) //Here const is good
Также, последнее замечание: istream/ostream
- это конкретные реализации, которые работают с char
в качестве элемента и чертами по умолчанию. Более общая реализация будет работать с любым видом потока, с операторами, определенными как это
template< typename Elem, typename Traits >
std::basic_istream< Elem, Traits >& operator>>(std::basic_istream< Elem, Traits >& in, Fraction& input)
template< typename Elem, typename Traits >
std::basic_ostream< Elem, Traits >& operator<<(std::basic_ostream< Elem, Traits >& out, Fraction const& output)