Как я могу определить функцию перегрузки оператора для сравнения двух объектов из двух разных классов? - PullRequest
0 голосов
/ 21 марта 2020

Я знаю, как определить функцию перегрузки операторов для двух объектов из одного класса, но я ищу везде по net или другим темам в StackOverflow, и я не получил правильный ответ.

I нужен простой пример для добавления или сравнения объектов из разных классов. Я не знаю, хочу ли я определить оператор перегрузки вне классов, должен ли я сделать это друзьями двух классов или что-то еще.

1 Ответ

3 голосов
/ 21 марта 2020

Это хороший случай для использования бесплатных операторов.

bool operator==(TypeA const & a, TypeB const & b) {
  // Do comparison
}

bool operator!=(TypeA const & a, TypeB const & b) {
  return !(a == b);
}

bool operator==(TypeB const & b, TypeA const & a) {
  return a == b;
}

bool operator!=(TypeB const & b, TypeA const & a) {
  return a != b;
}

Вы должны только подружить их с соответствующими типами, если это необходимо; если состояние может полностью наблюдаться от участников publi c, нет необходимости заводить их в друзья.


Однако существует альтернативный подход: если значения этих типов можно считать равными, это означает, что один может быть преобразован в другой. Если это так, их можно сравнить после преобразования:

TypeA a{createTypeA()};
TypeB b{createTypeB()};

bool result = a == TypeA{b};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...