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==,则代码更短,并且如果您移动到极坐标表示,则会更改一个函数.
当类字段发生变化时,平等测试和比较总是容易受到维护错误的影响.最大限度地减少直接访问状态的方法数量可以降低出错的风险.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |