Jam*_*rey 6 c++ operator-overloading operators
如果我已经有operator>和operator < defined(和operator ==),我是否需要定义operator> =和operator <=,或者如果我故意不声明它们,编译器是否会为它声明它们?
另外,如果我有operator == defined,编译器会为我声明operator!=吗?
编译器在这里不会为你做任何事情,但是通过从适当的类继承自动生成它是相对简单的,例如:
template< typename DerivedType >
class ComparisonOperators
{
public:
friend bool operator!=(
DerivedType const& lhs,
DerivedType const& rhs )
{
return !(lhs == rhs);
}
friend bool operator<=(
DerivedType const& lhs,
DerivedType const& rhs )
{
return !(rhs < lhs);
}
friend bool operator>(
DerivedType const& lhs,
DerivedType const& rhs )
{
return rhs < lhs;
}
friend bool operator>=(
DerivedType const& lhs,
DerivedType const& rhs )
{
return !(lhs < rhs);
}
protected:
~ComparisonOperators() {}
} ;
Run Code Online (Sandbox Code Playgroud)
定义<
并==
在您的课程中,并从中派生出来,您将获得所有运算符:
class MyClass : public ComparisonOperators<MyClass>
{
// ...
public:
bool operator==( MyClass const& other ) const;
bool operator<( MyClass const& other ) const;
// ...
};
Run Code Online (Sandbox Code Playgroud)
只是注意:我手动简化版本,我实际使用中,它定义==
和<
为好,查找成员函数compare
和isEqual
,并且使用compare
了==
与!=
当没有isEqual
.我不认为我引入了任何错误,但你永远不会知道.
归档时间: |
|
查看次数: |
214 次 |
最近记录: |