括号的C ++模板类运算符,等于insert和get元素

时间:2016-12-21 21:38:15

标签: c++ templates operator-overloading operators

你好我想创建简单的数组类来获取值并插入像(array[0] = 4)这样的值,这是我的程序,但我有同时使用[] =进行插入的问题

template <typename Param>
class arr
{
private:

    int Last_point = 0;
    Param Data[];

public:

    void& operator[]=(int Element_id, Param v)
    {
        Data[Element_id] = v;
    }

    Param& operator[] (int Element_id)
    {
        return Data[Element_id];
    }
};



void main()
{
    arr <int> Array;


    Array[1] = 555;

    cout << "Is(" << to_string(Array[1]) << ")" << endl;

    system("pause");
}

是否有像([] =)这样的运算符?或者为此,我必须使用哪种方法?如果只使用[]

,我也想获得价值

2 个答案:

答案 0 :(得分:2)

#include <iostream>
using namespace std;

template <typename Param, size_t Size> class arr {
private:
  Param Data[Size];
public:
  Param &operator[](size_t Element_id) {
    return Data[Element_id];
  }
};

int main() {
  arr<int, 3> Array;
  Array[1] = 555;
  cout << "Is(" << Array[1] << ")" << endl;
}

但是,arr在我的代码段中所做的一切都不太有用std::array

答案 1 :(得分:2)

您尝试 // Version for non-const objects Param& operator[](std::size_t i) { return Data[i]; } // Version for const objects Param const& operator[](std::size_t i) const { return Data[i]; } 函数的语法是错误的。你需要这样的东西:

template <typename Param, std::size_t N>
class arr
{
   private:

      Param Data[N];

   public:

      Param& operator[](std::size_t i)
      {
         return Data[i];
      }

      Param const& operator[](std::size_t i) const
      {
         return Data[i];
      }
};

如果要支持在编译时已知大小的数组,可以使用:

template <typename Param>
class arr
{
   private:

      Param* Data;

   public:

      arr(size_t size) : Data(new Param[size]) {}
      ~arr() { delete [] Data; }

      Param& operator[](std::size_t i)
      {
         return Data[i];
      }

      Param const& operator[](std::size_t i) const
      {
         return Data[i];
      }
};

如果要支持运行时已知大小的阵列,可以使用以下命令。但是,您需要了解The Rule of Three并确保正确实现复制构造函数和复制赋值运算符。

0