2013-07-22 193 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);。但正如其他人所說,你只能使用你實際上已經超載的那些。他們不會出現在他們自己的。