同时重载 [] 和 +
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+=
。
我有 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+=
。