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 に答える