比较同一类的两个对象
我试图在C++中重载==
运算符。比较同一类的两个对象
#include <string>
using namespace std;
namespace date_independent
{
class clock
{
public:
int clockPair[2] = {0,0};
operator string() const
{
string hourString;
string minString;
if(clockPair[0]<10)
{
hourString = "0"+to_string(clockPair[0]);
}
else
{
hourString = to_string(clockPair[0]);
}
if(clockPair[1]<10)
{
minString = "0"+to_string(clockPair[1]);
}
else
{
minString = to_string(clockPair[1]);
}
return hourString+":"+minString;
};
bool operator ==(const clock&clockOne, const clock&clockTwo) const
{
return string(clockOne)==string(clockTwo);
};
};
};
还有更多的代码比我包括,但这是重要的部分。我需要它,以便==
操作员可以比较类clock
的两个对象。例如,object1==object2
。有没有人可以帮助我?
像==
这样的二元运算符可以作为具有单个参数的成员函数重载(this
是左边的操作数,而参数是右边的),或者作为具有两个参数的非成员函数两个操作数的参数。
因此,无论
-
(如果你一直在标题中定义的定义移动到一个源文件或声明它
- 移动类的声明之外的运营商申报;或
- 将
friend
添加到定义中,以便它在周围的名称空间中声明一个非成员;或 - 从成员函数中删除第一个参数,使用
this
来代替。
inline
)
作为会员,它看起来像
bool operator==(const const & clockTwo) const {
return string(*this) == string(clockTwo);
}
您也可能希望将两个整数值直接比较进行保存字符串的代价。你也应该在函数和命名空间定义之后删除流氓;
,尽管大多数现代编译器不应该反对它们的存在。
已经编写了比较函数以取两个clock
对象并对它们进行比较,所以它应该是非成员函数(在类定义之后),而不是const
限定符。
bool operator==(const clock& clockOne, const clock& clockTwo)
{
return string(clockOne) == string(clockTwo);
}
当你在类定义内的操作员,左手参数隐式地提供给你(这是*this
),所以如果你想有实现它你需要的东西,如:
bool operator==(const clock& clockTwo) const
{
return string(*this) == string(clockTwo);
}
不过,这不是推荐==
,如果你有说从其他类型的T
一个隐含的构造函数,你将无法写代码翼my_t == my_clock
与成员版本,除非T
提供一个合适的比较运算符(clock
或string
)。非会员运营商提供更多对称操作。
虽然你的问题措辞不佳,但我相信你会问为什么你定义的操作符不工作?
如果您将运算符定义为类的成员,那么它只需要一个参数。例如:
当你定义操作为免费功能(不作为类的一部分),那么您需要定义两个参数:
class clock {
// ... class declaration ...
};
bool operator ==(const clock& lhsClock, const clock& rhsClock)
{
return string(lhsClock) == string(rhsClock)
}
哪里比较会看像这样:
if (lhsClock == rhsClock) // ... do something ...
重载可以在类定义内部或外部完成。如果你想在里面做,该函数只收到一个参数。您应该将this
与该参数进行比较。
bool operator ==(const clock&clockTwo) const
{
return string(*this)==string(clockTwo);
}
注意参数后const
,这意味着你将不会改变this
里面的功能。另一方面,如果你想在类定义之外做它,它需要两个参数,你应该比较它们。
bool operator ==(const clock&clockOne, const clock&clockTwo)
{
return string(clockOne)==string(clockTwo);
}
另外请注意,这将是更快地clockPair比较的对象,而不是使串并比较它们。
你的问题是什么? – moooeeeep 2014-12-02 07:17:09
相关:http://stackoverflow.com/q/4421706/1025391 – moooeeeep 2014-12-02 07:20:58