gpt4 book ai didi

c++ - 重载赋值运算符 带下标运算符

转载 作者:搜寻专家 更新时间:2023-10-31 00:37:16 25 4
gpt4 key购买 nike

我重载了下标运算符和赋值运算符,我正在尝试为赋值运算符获取正确的值例子 数组x;
x[0]=5;
通过重载下标运算符,我可以获得值 0,但是当我重载赋值运算符时,它会执行赋值,但它不会使用我的重载函数,因为 vaiable 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。这将调用您的运算符(operator):

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); }
};

关于c++ - 重载赋值运算符 带下标运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20168543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com