Ho una classe template Array:C++ - di sovraccarico [] operatore
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];
}
}
ho alcune domande sul operatore []
sovraccarico (ho trovato questo esempio sulla rete).
Capisco che T& operator [](int idx)
restituisca il riferimento al valore di matrice con l'indice idx
e che T operator [](int idx) const
restituisca il suo valore. Tuttavia, non sono sicuro in quale caso il riferimento o il valore verrà restituito utilizzando l'operatore []
.
Inoltre, se cambio T operator [](int idx) const
->T operator [](int idx)
, il compilatore si lamenta. Perché? Posso capire che il compilatore si lamenta perché solo il tipo restituito è diverso, ma perché non si lamenta quando viene aggiunto const
? Questo significa solo che non vengono modificati gli interni della classe, giusto?
ho cercato di eseguire il debug di questa piccola applicazione principale:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
E ogni volta T& operator [](int idx)
è chiamato. Perché?
Grazie in anticipo.
In una nota a margine, preferire i costruttori appropriati a funzioni come 'initialize'. C++ ti offre uno strumento perfetto per l'inizializzazione degli oggetti e si chiama costruttore. – SergeyA