同时重载[]与+运算符的实现疑问
解决类数组元素的加法操作问题
首先给你吃个定心丸:你已经实现的operator[]其实已经满足需求了!因为你返回的是int&(数组元素的引用),所以直接用原生的+=运算符就能完成给array12[index]加value的操作,根本不需要额外重载+运算符。
举个实际的代码例子:
class A { private: int array12[12]; // 假设是大小为12的数组 public: int& operator[](int index) { // 建议添加索引越界检查,比如 assert(index >=0 && index <12); return array12[index]; } }; // 使用的时候: int main() { A obj; obj[3] += 10; // 这行代码直接把obj.array12[3]的值加10 // 如果只是想获取相加后的结果(不修改原数组),直接用原生+: int result = obj[3] + 5; // result是obj.array12[3]的值加5,原数组元素不变 }
你之所以会纠结重载+运算符,可能是误解了操作逻辑:A[index]本身就是一个int&,它和普通的int变量完全一样,原生的+、+=等算术运算符都能直接作用在它身上,不需要你再给类A额外重载这些运算符。
如果你的需求是想实现更特殊的语法(比如obj + std::make_pair(2, 7)来给索引2的元素加7),那可以考虑重载operator+=来接受一个std::pair<int, int>参数,示例代码如下:
#include <utility> // 用于std::pair class A { private: int array12[12]; public: int& operator[](int index) { return array12[index]; } // 重载+=,接受(索引, 值)的pair A& operator+=(const std::pair<int, int>& idx_val) { int index = idx_val.first; int value = idx_val.second; // 同样建议添加索引检查 array12[index] += value; return *this; } }; // 使用方式: int main() { A obj; obj += std::make_pair(5, 3); // 给索引5的元素加3 }
但回到你的原始需求:A[index]+value或者修改array12[index]的值,现有的operator[]已经完全够用,不需要画蛇添足重载+运算符。
内容的提问来源于stack exchange,提问作者sasha
相关产品推荐
相关产品推荐

