同时重载 [] 和 +

Overloading [] and + simultaneously

我有 class 里面有数组。

假设我们里面有 class A 和 array12。

我需要做的就是 A[index]+value 所以我想将那个值添加到 array12[index]。

int &operator[](int index)
{
    return array12[index];
}  

但是重载运算符+时需要写什么?

重载+时如何知道元素索引?

你不能直接重载运算符来解决这个问题,因为 operator+ 只接受参数。这是不可能的:

void operator+(int idx, int num) // error: 2 parameters
{
    a[idx] += num;
}

解决此问题的一种方法是使用成员 currentIndex 和 setter 函数。例如:

void setCurrentIndex(int idx)
{
   currentIndex = idx;
}

void operator+(int el)
{
    array12[currentIndex] += el;
}

//usage:
A a;
a.setCurrentIndex(0);
a + 1;

附带说明一下,如果你定义了operator[],你可以直接做加法:

A a;
a[0] += 10;

如果基础类型很复杂,这将需要一些额外的代码才能使其正常工作。

首先-注意你问题中的一些错误信息

  • A[index] + value - A是class的名称,不是class的对象。
  • operator+ 此运算符应该 更新值,而是 return 预期的复制结果。您的意思可能是 operator+=

针对您的问题

operator+= 重载应该在您的数组包含的类型中实现。例如,如果 array12 包含 int 此代码将按您预期的方式工作:

int main() {
    A a;
    /* ... Some a initialization ... */
    a[3] += 2;
    return EXIT_SUCCESS;
}

假设您的 array12 包含更复杂的类型,例如名为 B 的自定义 class- 那么您应该在 B 中重载 operator+=