c ++使用[]运算符重载写入/设置

时间:2013-06-12 07:06:34

标签: c++ operator-overloading

我做了大量搜索,发现了大量的示例和教程,但在写入[]运算符时仍然无法弄清楚如何获取值...

我觉得我疯了。我必须遗漏一些非常简单的东西

据我所知,getset有一个功能,它看起来像这样:

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

1 个答案:

答案 0 :(得分:8)

不要将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);

运算符选项只是语法糖。