【问题标题】:Overloading [] and = operator for generic array为泛型数组重载 [] 和 = 运算符
【发布时间】:2013-03-16 04:47:19
【问题描述】:

我在 c++ 中创建了一个通用数组类。使用它我想重载 [] 和 = 运算符。 这样我就可以初始化数组元素,例如 数组 a1; a1[2]=77; 如何才能做到这一点? 这是我的代码:

tempate<class T>
class array
{
 T *data;
 int length;
 public:
 array()
 {
 length=0;
 }
 array(int data)
 {
 data=new T(data);
 length=data;
 }
 T operator[](int a)
 {
 return *(data+A);
 }
}

【问题讨论】:

    标签: c++ operator-overloading operator-keyword


    【解决方案1】:

    您的运营商需要返回一个参考。最好也有一个常量版本:

    T & operator[](std::size_t i) { return data[i]; }
    T const & operator[](std::size_t i) const { return data[i]; }
    

    【讨论】:

    • +1: std::size_t 类型在 operator[] 的上下文中比 int 更正确
    • 我也会在里面贴上assert
    【解决方案2】:

    通常是通过返回一个引用来完成的,即这样的:

    T& operator[](int a)
    {
        return *(data+a);
    }
    

    此外,为了允许从 const 上下文访问,您还应该提供一个 const 版本:

    const T& operator[](int a) const
    {
        return *(data+a);
    }
    

    【讨论】:

      【解决方案3】:

      避免代码重复:

      const T& operator[](std::size_t pos) const
      {
          ...
          ...
          ...
          return data[pos];
      }
      
      T& operator[](std::size_t pos)
      {
          return const_cast<T&>(static_cast<const T&>(*this)[pos]);
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 2012-12-10
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多