Open alexey-malov opened 9 years ago
Создание классов, состоящих только из статических функций, несет относительно мало пользы по сравнению со свободными функциям (возможно в собственном пространстве имен).
CRational();
CRational(int value);
CRational(int numerator, int denominator);
можно заменить на 1, с дефолтными параметрами
CRational(int numerator = 0, int denominator = 1);
std::pair<int, CRational> CRational::ToCompoundFraction() const
{
std::pair<int, CRational> result;
result.first = m_numerator / m_denominator;
result.second = *this - result.first;
return result;
}
можно внутри этого метода использовать обычные переменные для хранения целой и дробной части, а результат вернуть либо через make_pair, либо через initializer_list:
std::pair<int, CRational> CRational::ToCompoundFraction() const
{
auto integerPart = m_numerator / m_denominator;
auto fractionalPart = *this - integerPart;
return {integerPart, fractionalPart};
}
В .cpp файле можно написать using namespace std, чтобы не указыать его явно
Чтобы не быть многословным лучше объявить
class CRational
{
...
typedef std::pair<int, CRational> CompoundFraction;
...
};
typedef CRational::CompoundFraction CompoundFraction;
это улучшит также читаемость кода
friend void ToCommonDenominator(CRational &num1, CRational &num2);
Дружественную функцию лучше заменить на статический метод
Рекурсию в поиске НОД заменить на итерацию. Тесты должны помочь убедиться в том, что все нормально.