2013-07-22 148 views
0

是否可以在另一个类函数中使用重载运算符而不是主函数?运算符重载(C++)

我有2类函数下公共:

bool Angle::operator< (Angle& a2){...} 
Angle Angle::operator- (Angle a2){...} 

我想在第二个使用重载操作者从第一功能。我想在第二个函数中的代码是这样的:

Angle Angle::operator- (Angle a2) 
{ 
if (*this>=a2) 
{...} 
else 
cout<<"You can't subtract greater angle from a smaller one"<<endl; 
} 

所以,我可以这样做吗?如果我可以如何?

+0

通过重载'operator> ='?或者通过切换代码来使用'<而不是'> ='? –

+0

你为什么通过引用来传递参数?如果你不需要改变它,那么通过const引用或值传递它。 – Simon

回答

2

您超载了运营商<,并且您在代码中使用了>=。所以,你需要另一个重载函数或改变先前的一个:

Angle Angle::operator- (Angle a2) 
{ 
if (*this<a2) 
cout<<"You can't subtract greater angle from a smaller one"<<endl; 
else 
{...} 
} 
0

你可以写这样的:

Angle Angle::operator- (Angle a2) 
{ 
    if (!((*this) < a2)) 
     {...} 
    else 
     cout<<"You can't subtract greater angle from a smaller one"<<endl; 
} 

>=相当于不<只要那些已经实施有预期的含义。

简短的回答是肯定的,你可以肯定地从另一个重载操作符。事实上,在很多情况下,运营商实施的正常形式是以另一种形式来实现。例如,operator!=应该经常实施为return !(*this == other);。但正如其他人所说,你只能使用你实际上已经超载的那些。他们不会出现在他们自己的。