其他分享
首页 > 其他分享> > c – 重载赋值运算符用下标运算符

c – 重载赋值运算符用下标运算符

作者:互联网

我重载了下标运算符和赋值运算符,我试图获得赋值运算符的正确值

 数组x;
X [0] = 5;
通过重载下标运算符我可以得到值0,但是当我重载赋值运算符时,它执行赋值但它不使用我的重载函数,因为可变2应该具有值5.

class Array
{

public:
    int *ptr;
    int one,two;
    Array(int arr[])
    {
        ptr=arr;
    }

    int &operator[](int index)
    {
        one=index;
        return ptr[index];
    }
    int & operator=(int x){
        two=x;
        return x;
    }   
};

int main(void)
{
    int y[]={1,2,3,4};
    Array x(y);
    x[1]=5;
    cout<<x[0]<<endl;
}

解决方法:

它不使用您的operator =因为您没有分配给Array的实例,而是分配给int.这将调用您的操作符:

Array x;
x = 7;

如果要拦截operator []返回的赋值,则必须让它返回一个代理对象并为该代理定义赋值运算符.例:

class Array
{
  class Proxy
  {
    Array &a;
    int idx;
  public:
     Proxy(Array &a, int idx) : a(a), idx(idx) {}
     int& operator= (int x) { a.two = x; a.ptr[idx] = x; return a.ptr[idx]; }
  };

  Proxy operator[] (int index) { return Proxy(*this, index); }
};

标签:subscript,c,operator-overloading,assignment-operator,overloading
来源: https://codeday.me/bug/20191008/1872431.html