cv3*_*000 2 c++ overloading class function operators
下面这两种重载!=运算符的方法有什么区别.哪个更好?
Class Test
{
...//
private:
int iTest
public:
BOOL operator==(const &Test test) const;
BOOL operator!=(const &Test test) const;
}
BOOL operator==(const &Test test) const
{
return (iTest == test.iTest);
}
//overload function 1
BOOL Test::operator!=(const &Test test) const
{
return !operator==(test);
}
//overload function 2
BOOL Test::operator!=(const &Test test) const
{
return (iTest != test.iTest);
}
Run Code Online (Sandbox Code Playgroud)
我刚刚看到函数1的语法用于调用兄弟运算符函数,并想知道是否以这种方式编写它会带来任何好处.
您的第一次重载确保即使您的实现会发生变化,调用!=
您的类型也将始终提供相反的调用.==
==
您的第二个重载功能没有,因为可以==
在将来提供任何实现并更改现有实现.
如果你想确保它!=
总是与之相反==
,那就去第一个(以额外函数调用为代价,无论如何都可以很好地进行内联).
这是一个很好的例子.假设你有一个Point2D
带有字段x
和类的类y
.如果要实现==
,则必须在字段x
和字段上进行比较y
.如果!=
通过调用实现operator==
,则代码更短,并且如果您移动到极坐标表示,则会更改一个函数.
当类字段发生变化时,平等测试和比较总是容易受到维护错误的影响.最大限度地减少直接访问状态的方法数量可以降低出错的风险.