0

我在 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);
 }
}
4

3 回答 3

3

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

T & operator[](std::size_t i) { return data[i]; }
T const & operator[](std::size_t i) const { return data[i]; }
于 2013-03-16T04:55:39.577 回答
2

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

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

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

const T& operator[](int a) const
{
    return *(data+a);
}
于 2013-03-16T04:55:10.903 回答
0

避免代码重复:

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]);
}
于 2013-03-16T06:03:14.860 回答