0

メイン関数の代わりに別のクラス関数でオーバーロードされた演算子を使用することは可能ですか?

public の下に 2 つのクラス関数があります。

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

最初の関数のオーバーロードされた演算子を 2 番目の関数で使用したいと考えています。2番目の関数のコードを次のようにしたい:

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

それで、私はそれをすることができますか?そして、どうすればいいですか?

4

2 に答える 2

2

演算子をオーバーロードし、コードで<使用しました。>=したがって、別のオーバーロード関数が必要か、前のものを変更する必要がありました:

Angle Angle::operator- (Angle a2)
{
if (*this<a2)
cout<<"You can't subtract greater angle from a smaller one"<<endl;
else
{...}
}
于 2013-07-22T00:20:58.970 に答える
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);。しかし、他の人が言ったように、実際にオーバーロードしたものしか使用できません。それらは単独では表示されません。

于 2013-07-22T00:40:50.477 に答える