我有一个简单的课程
class sample
{
int i;
public:
sample(int i): i(i){}
};
int main()
{
cout << max (12, 26) << endl; // working fine
sample s1(10), s2(20);
cout << max (s1, s2); // lots of compilation errors
return 0;
}
我希望max(s1,s2)应该返回最大max(s1,s2)。我知道我错过了一些东西,但却无法想象这些东西。
任何帮助将不胜感激。
Devesh
答案 0 :(得分:7)
您有两种选择:首先,实施operator<
,例如,
bool operator<(const sample& lhs, const sample& rhs)
{
return lhs.i < rhs.i;
}
请注意,在此特定情况下,i
为private
,因此上述运算符必须声明为friend
sample
。或者,您可以使用成员 1 :
class sample
{
// as before ...
bool operator<(const sample& rhs) const { return i < rhs.i; }
};
其次,使用带有二进制比较函子的重载,所以你可以说
std::max(s1, s2, comp);
其中comp
可以是
bool comp(const sample& lhs, const sample& rhs)
{
return lhs.i < rhs.i; // or other logic
}
1非成员是优选的,因为它在LHS和RHS之间具有完美的对称性。使用成员时不是这种情况。使用隐式转换构造函数时,这可能是一个问题
答案 1 :(得分:0)
class sample
{
public:
int i;
sample(int i): i(i){}
bool operator< (const sample& other) const
{
return i < other.i;
}
};
int main()
{
sample s1(10), s2(20);
max (s1, s2);
return 0;
}
在const
后注意operator <
,这很重要。 :)