Re[2]: Операции сравнения
От: LaptevVV Россия  
Дата: 28.02.26 07:51
Оценка: :))
LVV>>А если трехстороннее сравнение не определено в классе, чего тогда делается ?
LVV>>Понятно, что равенство и неравенство можно сгенерить (но и тут есть нюансы).
LVV>>А операция МЕНЬШЕ — генерится ?
LVV>>И какой из трех вариантов порядка соблюдается ?
B>А если попробовать?
А то я не пробовал
Вот смотри, интерфейс класса
class Fraction final{
  public:
    struct divide_by_zero {};               // типы исключения
    struct denumerator_is_zero {};
    // конструкторы
    Fraction() = default;
    Fraction(int numerator) noexcept;       // конструктор преобразования
    Fraction(int num, int denum);           // 2 аргумента
    // методы
    std::string toString() const;
    // операции
    Fraction& operator+=(const Fraction &R) noexcept;
    Fraction& operator-=(const Fraction &R) noexcept;
    Fraction& operator*=(const Fraction &R) noexcept;
    Fraction& operator/=(const Fraction &R);
    Fraction& operator++() noexcept;
    Fraction& operator--() noexcept;
    // трехстороннее сравнение
   //int operator<=>(const Fraction&) const noexcept;
    
    // преобразование в int - целая часть дроби
    operator int() const noexcept;
    // дружественные функции
    friend std::istream& operator>>(std::istream& t, Fraction &r);
  private:
    int num {0}, denum{1};              // поля закрыты
    void reduce();                      // сокращение дроби
};
Естественно, в коде реализация отсутствует.
Нет никаких определений операций сравнения.
Но!Вот такой код работает абсолютно правильно:
    Fraction A {3};                    // целое = <3/1>
    Fraction B {6,4};                  // дробь = <3/2>
    cout << A << B << endl;
// это работает - почему ?
    cout << std::boolalpha
         << (A == B) << '\n'  // false
         << (A != B) << '\n'  // true
         << (A <  B) << '\n'  // false
         << (A <= B) << '\n'  // false
         << (A >  B) << '\n'  // true
         << (A >= B) << '\n'; // true

Трехстроннее сравнение автоматом синтезируется ?
Или обычные сравнения автоматом синтезируется ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.