template 参照 operator について
「ゲームプログラマになる前に覚えておきたい技術」という書籍を読みながらC++でプログラミングの学習をしているのですが、template class と 参照 と operator の組み合わさったクラスでわからないところがあります。
自分で出来る限り調べてみましたが、解決できなかったので、答えていただけると幸いです。
Cの学習はひととおり済んでおりますが、まだC++は学習を始めたばかりなので理解が浅いです。
質問内容にいたらない点があるとは思いますが、お願いします。
以下のようなクラス定義文がありました。
template< class T > class Array2D{
public:
Array2D() : mArray( 0 ){}
~Array2D(){
delete[] mArray;
mArray = 0;
}
void setSize( int size0, int size1 ){
mSize0 = size0;
mSize1 = size1;
mArray = new T[ size0 * size1 ];
}
T& operator()( int index0, int index1 ){
return mArray[ index1 * mSize0 + index0 ];
}
const T& operator()( int index0, int index1 ) const {
return mArray[ index1 * mSize0 + index0 ];
}
private:
T* mArray;
int mSize0;
int mSize1;
};
この定義文の以下の部分
T& operator()( int index0, int index1 ){
return mArray[ index1 * mSize0 + index0 ];
}
において、T&という記述がなければ、()という演算子のはたらきを再定義していて、
mArrayを2次元的に利用できるように値を返しているように見えるのですが、
T&がつくことによって、なにがどうなっているのでしょうか。
それと、参照というのは、利用するときには必ず初期化が必要、と学習したのですが、
この場合、初期化の処理になっているのでしょうか。
今までに出てきた参照では、簡単な例でいうと
int n;
int& m = n;
というように、型名&別名=参照先 と、即初期化して使っていました。
これなら初期化されているのはわかりますが、今回のように、
「別名」の部分がoperatorになっていると、どのアドレスが「別名」が指すアドレスになるのでしょうか。
さっぱりわかりません。
質問の連続になってしまって申し訳ありません。
ほんとに困ってます。
おねがいします。
お礼
ありがとうございました!!大変参考になりました!!!