0

今、私は書かなければならない

st[1];
st = 5;

これを行うには、コードで何を変更する必要がありますか:

st[1] = 5;

#include <iostream>
using namespace std;
class A
{
public:
  A(){this->z = 0;}
  void operator = (int t)  { this->x[this->z] = t+10; }
  int& operator [] (int t) { this->z=t; return this->x[t]; }
private:
  int x[2];
  int z;
};
void main()
{
  A st;
  st[0]=9;
  cout<<st[0]; 
  system("pause");
}

UPD: 19 ではなく 9 が表示されるようになりました。

4

1 に答える 1

4

組み込み演算子は、左側のオペランドとして左辺値=を想定しています。したがって、このステートメントをコンパイルするには、次のようにします。

st[1] = 5;

operator []fromの戻り値の型intを次のように変更する必要がありますint&

    int& operator [] (int t) { return this->x[t]; }
//  ^^^^

呼び出されたオブジェクトが次の場合にconst参照を返すオーバーロードを提供することもできます。constoperator []const

    int const& operator [] (int t) const { return this->x[t]; }
//  ^^^^^^^^^^                     ^^^^^
于 2013-03-08T17:14:02.033 に答える