通过Overloading Operator []访问自定义数组包装器中的元素

Accessing element in custom array wrapper via overloading operator []

本文关键字:包装 元素 数组 自定义 Operator Overloading 访问 通过      更新时间:2023-10-16

我正在尝试实现自己的数组包装器。我超载[]运算符,返回数组中元素的地址。但是,当我在MAIN中动态分配ArrayWrapper类时,它不起作用。

为什么它不起作用? 是因为变量ARR是一个指针?

我得到这些错误:

描述资源路径位置类型不能绑定'std :: ostream {aka std :: basic_ostream}'lvalue to 'std :: basic_ostream&&''cviceni.cpp/cviceni/src行25 c/c 问题

描述资源路径位置类型"操作员<<" (操作数类型是'std :: ostream {aka std :: basic_ostream}'和 'arraywrapper'(cviceni.cpp/cviceni/src行25 c/c 问题

工作代码

    ArrayWrapper arr(250);
 try
 {
   for(int i = 0; i < arr.getSize(); i++)
   {
     arr[i] = i + 1;
     cout << arr[i] << endl;
   }
}
catch(std::range_error& e)
  {
      cout << e.what() << endl;
  }
  cout << "End..." << endl;
  return 0;
}

不工作代码:

ArrayWrapper *arr = new ArrayWrapper(250);
  try
  {
    for(int i = 0; i < arr->getSize(); i++)
    {
      arr[i] = i + 1;
      cout << arr[i] << endl;
    }
  }

ArrayWrapper实现:

class ArrayWrapper
{
private:
  int size;
  int *elements;
public:
  ArrayWrapper(int n) : size(n), elements(new int[n])
  {
    for(int i = 0; i < size; i++)
      elements[i] = 0;
  };
  ~ArrayWrapper(){delete []elements;};
  int& operator[](int i)
  {
    if(i >= size || i < 0)
      {
    throw range_error("Out of range");
      }
    return elements[i];
  };
  int getSize(){ return size;};
};

是您在第二个示例中使用指针 arr[2]不是ArrayWrapper上的操作,它在指针上的操作。

ArrayWrapper *arr = new ArrayWrapper(250);
  try
  {
    for(int i = 0; i < arr->getSize(); i++)
    {
      (*arr)[i] = i + 1;
      cout << (*arr)[i] << endl;
    }
  }