C++ 重载:从友元函数切换到成员函数
C++ overloading: switching from friend to member function
我有这段代码,我希望从友元函数切换到成员函数:
inline bool operator< (const MyClass& left, const MyClass& right)
{
return (((left.value == 1) ? 14 : left.value) < ((right.value == 1) ? 14 : right.value));
}
inline bool operator> (const MyClass& left, const MyClass& right)
{
// recycle <
return operator< (right, left);
}
我已经走到这一步了:
inline bool MyClass::operator< (const MyClass& right)
{
return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}
inline bool MyClass::operator> (const MyClass& right)
{
// recycle <
return right.operator<(*this);
}
然而,VC++ 给我这个抱怨:
cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'
我该如何解决这个问题?另外,我的operator>
写对了吗?
你的两个运算符都应该是 const
class 方法:
inline bool MyClass::operator< (const MyClass& right) const
{
return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}
inline bool MyClass::operator> (const MyClass& right) const
{
// recycle <
return right.operator<(*this);
}
请注意,在 >
重载中,right
是 const MyClass &
。
因此,right.operator<
要求<
运算符是const
class方法,因为right
是const。当您使用 const
对象玩游戏时,您只能调用其 const
方法。您不能调用其非 const
方法。
我有这段代码,我希望从友元函数切换到成员函数:
inline bool operator< (const MyClass& left, const MyClass& right)
{
return (((left.value == 1) ? 14 : left.value) < ((right.value == 1) ? 14 : right.value));
}
inline bool operator> (const MyClass& left, const MyClass& right)
{
// recycle <
return operator< (right, left);
}
我已经走到这一步了:
inline bool MyClass::operator< (const MyClass& right)
{
return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}
inline bool MyClass::operator> (const MyClass& right)
{
// recycle <
return right.operator<(*this);
}
然而,VC++ 给我这个抱怨:
cannot convert 'this' pointer from 'const MyClass' to 'MyClass &'
我该如何解决这个问题?另外,我的operator>
写对了吗?
你的两个运算符都应该是 const
class 方法:
inline bool MyClass::operator< (const MyClass& right) const
{
return (((this->value == 1) ? 14 : this->value) < ((right.value == 1) ? 14 : right.value));
}
inline bool MyClass::operator> (const MyClass& right) const
{
// recycle <
return right.operator<(*this);
}
请注意,在 >
重载中,right
是 const MyClass &
。
因此,right.operator<
要求<
运算符是const
class方法,因为right
是const。当您使用 const
对象玩游戏时,您只能调用其 const
方法。您不能调用其非 const
方法。