我如何定义运算符重载函数来比较来自两个不同 类 的两个对象?

how can i define an operator overloading function to compare two objects from two different classes?

我知道如何为来自同一个 class 的两个对象定义运算符重载函数, 但我在网上到处搜索或在 Whosebug 中搜索其他主题,但没有得到正确答案。

我需要一个简单的示例来添加或比较来自不同 classes 的对象。我不知道我是否想在 classes 之外定义运算符重载,我应该将其作为两个 classes 的朋友还是其他东西。

这是使用免费运算符的好案例。

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;
}

只有在必要时,你才应该让他们成为相关类型的朋友;如果public个成员能完全观察到状态,就没必要交朋友


然而,还有另一种方法:如果可以认为这些类型的值相等,则意味着可以将一个转换为另一个。如果是这样的话,他们可以在转换后进行比较:

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

bool result = a == TypeA{b};