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:现在我看到的是 9 而不是 19。

4

1 回答 1

4

内置运算符=需要一个左值作为其左手操作数。因此,为了编译此语句:

st[1] = 5;

operator []您需要将from的返回类型更改intint&

    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 回答