use*_*200 6 c++ operator-overloading comparison-operators
我需要能够将我的一个类(其中包含多于一个整数)与整数进行比较,即使这可能会延伸到相等的一点,但它足够接近......
如何为不同类型重载相等运算符?
我基本上有这样一个班级
struct MyClass {
int start;
int middle;
int threequarters;
};
Run Code Online (Sandbox Code Playgroud)
和重载的运算符
inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
return lhs.middle == rhs.middle;
}
Run Code Online (Sandbox Code Playgroud)
所以,当我有需要比较靠中间变量以及整数比较,但我不知道我是否需要两套操作功能,其中一个整数LHS和一个地方的整数是RHS?
inline bool operator==(const int& lhs, const MyClass& rhs) {
return lhs == rhs.middle;
}
inline bool operator==(const MyClass& lhs, const int& rhs) {
return lhs.middle == rhs;
}
Run Code Online (Sandbox Code Playgroud)
为了澄清我的评论,这将支持代码,因此您可以提供运算符的所有变体:
inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
return lhs.middle == rhs.middle;
}
inline bool operator==(const int& lhs, const MyClass& rhs) {
return lhs == rhs.middle;
}
inline bool operator==(const MyClass& lhs, const int& rhs) {
return lhs.middle == rhs;
}
Run Code Online (Sandbox Code Playgroud)
并为每个操作员执行此操作(这会导致大量代码)。或者,如果有意义,您可以提供一个从 int 构造的构造函数:
struct MyClass {
MyClass() {} // default
MyClass( int x ) { /* init for an int here */ }
int start;
int middle;
int threequarters;
};
Run Code Online (Sandbox Code Playgroud)
如果您这样做,那么您将只需要每个运算符的 MyClass,MyClass 版本:
inline bool operator==(const MyClass& lhs, const MyClass& rhs) {
return lhs.middle == rhs.middle;
}
Run Code Online (Sandbox Code Playgroud)
因为当编译器看到:
if ( 5 == my_class ) {}
Run Code Online (Sandbox Code Playgroud)
它实际上是这样做的:
if ( MyClass(5).operator==( my_class ) ) {}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6702 次 |
最近记录: |