Rya*_*Lee 1 c++ operator-overloading
我做了大量的搜索,发现了大量的示例和教程,但仍然无法弄清楚如何在写入[]运算符时获取值...
我觉得我疯了.我必须错过一些非常简单的事情
据我可以告诉有一个单一的功能get和set它看起来是这样的:
V& operator[](string K);
Run Code Online (Sandbox Code Playgroud)
或这个:
double &operator[](int n);
Run Code Online (Sandbox Code Playgroud)
现在好了,我们可以得到的是:
a[HERE]
Run Code Online (Sandbox Code Playgroud)
因为HERE变成double &operator[](int HERE);
我们可以很容易地使用它
但我们如何得到的是:
a[4] = HERE
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
不要认为是operator[]获取或设置的功能,这可能会令人困惑.将其视为正常功能.实际上,让我们将其重新编写为正常函数:
struct X
{
int arr[10];
int& getIndex(int idx) { return arr[idx]; }
};
//...
//initialize x of type X
x.getIndex(3) = 42;
Run Code Online (Sandbox Code Playgroud)
该方法x.getIndex(3)将返回对成员数组中第4个元素的引用idx.因为您通过引用返回,返回值是一个l值并引用该确切元素,因此您可以为其分配一个值,例如42.这将修改成员,x.arr[3]因为该函数返回该特定对象的别名.
现在你可以operator[]像以前一样重写这个
struct X
{
int arr[10];
int& operator[](int idx) { return arr[idx]; }
};
Run Code Online (Sandbox Code Playgroud)
并通过调用获得相同的结果
x[3];
Run Code Online (Sandbox Code Playgroud)
甚至
x.operator[](3);
Run Code Online (Sandbox Code Playgroud)
运算符选项只是语法糖.
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |