c++重载写/集操作符[]
c++ overload the [] operator for write/set
我已经做了大量的搜索,发现了大量的例子和教程,但仍然无法弄清楚如何在写入[]
运算符时获得值…
我觉得我要疯了。我一定是错过了一些非常简单的东西
据我所知,get
和set
有一个单一的函数,它看起来像这样:
V& operator[](string K);
或:
double &operator[](int n);
现在很好,我们可以得到什么是:
a[HERE]
为HERE
变为double &operator[](int HERE);
我们可以很容易地使用它
但是我们怎么得到什么呢?
a[4] = HERE
c#有两个非常明确的get和set方法,其中value关键字表示要分配的对象。
public string this[int key]
{
get
{
if(key == 1)
return "1!";
if(key == 2)
return "2!";
else
return "3!";
}
set
{
if( value == "setting") //value is a[3] = THIS
this.isSet = true;
}
}
不要将operator[]
视为获取或设置的函数,这可能会令人困惑。把它想象成一个普通的函数。实际上,让我们把它重新写成一个普通的函数:
struct X
{
int arr[10];
int& getIndex(int idx) { return arr[idx]; }
};
//...
//initialize x of type X
x.getIndex(3) = 42;
方法x.getIndex(3)
将返回对成员数组idx
中的第4个元素的引用。因为您是通过引用返回的,所以返回值是一个l值,并且指向那个确切的元素,所以您可以为它赋一个值,比如42
。这将修改成员x.arr[3]
,因为函数返回该特定对象的别名。
现在你可以用operator[]
重写这个,就像以前一样
struct X
{
int arr[10];
int& operator[](int idx) { return arr[idx]; }
};
并通过调用
得到相同的结果x[3];
或者
x.operator[](3);