ich eine Template-Klasse Array haben:C++ - Überlastung Operator []
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];
}
}
Ich habe einige Fragen auf Betreiber []
Überlastung (Ich fand dieses Beispiel auf netto).
Ich verstehe, dass T& operator [](int idx)
Verweis auf Array-Wert mit Index idx
zurückgibt und dass T operator [](int idx) const
seinen Wert zurückgibt. Ich bin mir jedoch nicht sicher, in welchem Fall Referenz oder Wert mit dem Operator []
zurückgegeben wird.
Auch, wenn ich T operator [](int idx) const
ändern ->T operator [](int idx)
, beschwert sich Compiler. Warum das? Ich kann verstehen, dass Compiler beschwert, weil nur Rückgabetyp ist anders, aber warum es nicht beschweren, wenn const
hinzugefügt wird? Das bedeutet nur, dass nicht die Klasseneinbauten geändert werden, oder?
Ich habe versucht, diese kleine Haupt-Implementierung zu debuggen:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
Und jedes Mal T& operator [](int idx)
genannt wird. Warum?
Vielen Dank im Voraus.
Nebenbei bemerkt, bevorzugen Sie richtige Konstruktoren zu Funktionen wie 'initialize'. C++ bietet Ihnen ein perfektes Werkzeug für die Initialisierung von Objekten und es heißt Konstruktor. – SergeyA