PDA

Visualizza la versione completa : [C++] Overload dell'operatore []


Squall1988
26-03-2005, 10:00
Salve, ho un problema.
Sto lavorando sull'overload dell'operatore [] di una classe banale, come


class numVet {
int x[10];
}

A questo punto, se scrivo l'overload come segue


int& operator[] (int ind)
{
return x[ind];
}

Dopo mi risulta impossibile creare un vettore di istanze :dhò:

Non esiste un modo per farlo, anche magari facendo qualche cosa per fargli capire gli array a due dimensioni??

netarrow
26-03-2005, 11:30
guarda questo esempio:



#include <iostream.h>

class test {
private:
int x[10];
public:
test(int y) {
cout << "Oggetto costruito " << y << "\n";
}
int& operator[](int i) {
return x[i];
}
};

int main() {
//operator[] su x membro di test
test t(1);
for(int i = 0; i < 10; i++) {
t[i] = 5;
}

for(int x = 0; x < 10; x++) {
cout << t[x] << endl;
}
//~

//array di istanze operator[] su istanza
test* tt[10];

for(int y = 0; y < 10; y++) {
tt[y] = new test(y);
(*tt[y])[y] = y;//chiamando operator [] si riferirà a x membro
cout << "membro x vale: " << (*tt[y])[y] << endl;
}
//~

return 0;
};


Per sovraccaricare gli array multidimensionali non saprei, non ne ho mai avuto l'esigenza, adesso cerco una soluzione se qualcuno l'ha già pronta fa un favore anche a me.

:ciauz:

Squall1988
26-03-2005, 11:55
accidenti nn ci ho mai capito nulla di sta roba dell'allocazione dinamica :cry: :cry:

netarrow
26-03-2005, 12:06
Originariamente inviato da Squall1988
accidenti nn ci ho mai capito nulla di sta roba dell'allocazione dinamica :cry: :cry:

scusami non volevo confonderti :(

praticamente con



test = new test(1);


creo un oggetto test nel array di istanze, quindi con [] otterrò l'istanza nella posizione specificata, dato che ho usato un puntatore quando dopo voglio usare [] per riferirmi al membro x della classe devo dereferenziare con *:



(*tt[y])[y]


se non usassi un puntatore sarebbe la stessa cosa ma senza *



(tt[y])[y]


la parte tt[y] ritorna l'oggetto a quella posizione, una volta che ottengo un oggetto posso intervenire con operator[] solo che devo tenere fra parentesi sennò lo interpreta come un array di array

:ciauz:

Squall1988
26-03-2005, 12:11
uhm, non mi sembra peso alla fine :D
in pratica tu crei un vettore di puntatori alla classe, giusto?

netarrow
26-03-2005, 12:31
Originariamente inviato da Squall1988
uhm, non mi sembra peso alla fine :D
in pratica tu crei un vettore di puntatori alla classe, giusto?

si :ciauz:

Squall1988
26-03-2005, 12:38
beh è bella come soluzione :D

xò spero che ci sia anche un modo per usare array a 2 dimensioni xkè secondo me sarebbe + funzionale :rollo: :maLOL:

Loading