私はテンプレートクラスの配列を持っている:C++ - のオーバーロード[]演算子
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
私は(私はネット上でこの例を見つけました)演算子オーバーロード[]
上のいくつかの質問を持っています。
T& operator [](int idx)
は、インデックスidx
を持つ配列値への参照を返し、T operator [](int idx) const
はその値を返します。 ただし、[]
演算子を使用して参照または値が返されるかどうかはわかりません。
また、私がT operator [](int idx) const
- >T operator [](int idx)
に変更した場合、コンパイラは不平を言います。何故ですか? 戻り値の型が異なるだけなので、コンパイラが文句を言うのは理解できますが、const
を追加したときになぜそれが文句を言わないのですか?これは、クラス内部のどれもが変更されていないことを意味します。
私はこの小さな主な実装をデバッグしようとした:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
をその都度T& operator [](int idx)
が呼び出されます。どうして?
ありがとうございます。
「初期化」のような関数に対する適切なコンストラクタを優先します。 C++はオブジェクトの初期化に最適なツールを提供し、コンストラクタと呼ばれています。 – SergeyA