2

マイナス(-)、インクリメント(++)。etcを使用した単項演算子のオーバーロードについて読んでいました。練習のために同じコードを書こうと思ったのですが、実行しようとするとマイナス演算子とインクリメント演算子の両方でエラーが発生します。問題はメインの演算子の呼び出し方にあると思います。これを行う正しい方法は何ですか?

#include<iostream>

using namespace std;

class c{
   int x;
   int y;
   public:
      c(int a,int b){
             x=a;
             y=b;   
      }

      void operator -(){
             x=x+1;
             y=y+1;
      }

      void display(){
             cout<<x<<" "<<y<<"\n";
      }

};

int main()
{
     c obj(2,3);
     obj.display();
         obj- ;    //I think the error is on this line
     obj.display();
     return 0;
}

obj-を-objに置き換えると、コードは正常に機能します。なぜそうなのですか?++演算子のオーバーロードの問題も同じです(++ objを使用すると正常に機能しますが、obj ++は機能しません)、なぜですか?

ありがとう。

4

3 に答える 3

4

単項マイナス演算子-は前置演算子のみです。

演算子のサフィックス バージョンをオーバーロードするには、ダミーのintパラメーター++が必要です。例えば

struct foo
{
    void operator - ()
    {
        std::cout << "hello" << std::endl;
    }

    void operator ++ (int)
    {
        std::cout << "world" << std::endl;
    }
};

int main()
{
    foo bar;
    -bar;
    bar++;
}
于 2012-04-20T19:26:45.787 に答える
2

まず、新しい演算子を発明することはできず、既存のものを再定義するだけなので、単項のポストマイナスは実行できません。デクリメント後の演算子は (もちろん) 1 つだけではなく 2 つのマイナス記号です。

第 2 に、インクリメントまたはデクリメント演算子を定義するときは、プリフォームとポストフォームを区別するために関数に (未使用の) int 引数を与えます。関数に引数がある場合、それはポストインクリメントまたはポストデクリメント操作ですが、それがなければ、プレインクリメント/プレデクリメントです。

于 2012-04-20T19:26:17.087 に答える
1

単項 - 演算子は否定演算子です。-5またはと言うとこうなります-var5-またはとは言いませんvar-。の後にいる場合はvar - 3、二項演算子をオーバーロードします。

ポストインクリメント演算子には、プリインクリメント演算子と区別するためのダミーの int 引数があります。

于 2012-04-20T19:25:48.863 に答える