我如何定义运算符重载函数来比较来自两个不同 类 的两个对象?
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};
我知道如何为来自同一个 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};