Как перегрузить новый трехсторонний оператор для простого класса, значение которого зависит от двух числовых свойствC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как перегрузить новый трехсторонний оператор для простого класса, значение которого зависит от двух числовых свойств

Сообщение Anonymous »

Перегрузка оператора трехстороннего сравнения.
Меня немного сбивает с толку оператор трехстороннего сравнения. Я не понимаю, почему два типа возвращаемых значений, которые я перечислил ниже, используются с оператором трехстороннего сравнения.
  • std::strong_ordering
  • std::weak_ordering
Может ли кто-нибудь объяснить, как перегрузить оператор трехстороннего сравнения и как определить, какой тип возвращаемого значения использовать при его перегрузке (слабый или сильный)?
Не могли бы вы использовать интерфейс ниже, чтобы показать мне, как можно перегрузить для него трехсторонний оператор сравнения. Объект Position должен быть больше, если его свойство row больше, чем у другого объекта Position. Если значения строк объекта Position равны, то наибольшим является тот, у которого значение столбца больше. Если значения строки и столбца равны, то обе позиции одинаковы (или равны).
2. Строку объектов координат и col можно рассматривать просто как size_t или int, поскольку они в любом случае являются именно такими.

#pragma once
#ifndef POSITION_HPP
#define POSITION_HPP

#include

#include
#include
#include
#include
#include

namespace Text {

class Position
{
Coordinate row; /// @private
Coordinate col; /// @private

public:
Position();
Position(size_t rowNum);
Position(size_t rowNum, size_t colNum);
Position(Position &) noexcept = default; /// Copy Ctor
Position(Position &&) noexcept = default; /// Move Ctors

Position &operator = (const Position &) = default; /// Copy Assignment Ops
Position &operator = (Position &&) noexcept = default; /// Move Assignment Op

Coordinates getCoordinates() noexcept;
Coordinate getRow() noexcept;
Coordinate getCol() noexcept;

void setPosition(size_t rowNum, size_t colNum);
void setRow(size_t rowNum);
void setCol(size_t colNum);

Position &operator ++ () noexcept;
Position &operator ++ (int) noexcept;
Position &operator -- () noexcept;
Position &operator -- (int) noexcept;

friend bool operator == (const Position &lhs, const Position &rhs) noexcept;
friend std::strong_ordering operator (const Position &lhs, const Position &rhs)
noexcept;
};

};

#endif



Подробнее здесь: https://stackoverflow.com/questions/798 ... ue-is-cont
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»