Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444

    [C++] Overload dell'operatore []

    Salve, ho un problema.
    Sto lavorando sull'overload dell'operatore [] di una classe banale, come

    codice:
    class numVet {
      int x[10];
    }
    A questo punto, se scrivo l'overload come segue

    codice:
    int& operator[] (int ind)
    {
      return x[ind];
    }
    Dopo mi risulta impossibile creare un vettore di istanze

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

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    guarda questo esempio:

    codice:
    #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.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    accidenti nn ci ho mai capito nulla di sta roba dell'allocazione dinamica
    *********************************
    Andrea
    *********************************

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Squall1988
    accidenti nn ci ho mai capito nulla di sta roba dell'allocazione dinamica
    scusami non volevo confonderti

    praticamente con

    codice:
    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 *:

    codice:
    (*tt[y])[y]
    se non usassi un puntatore sarebbe la stessa cosa ma senza *

    codice:
    (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

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    uhm, non mi sembra peso alla fine
    in pratica tu crei un vettore di puntatori alla classe, giusto?
    *********************************
    Andrea
    *********************************

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da Squall1988
    uhm, non mi sembra peso alla fine
    in pratica tu crei un vettore di puntatori alla classe, giusto?
    si
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    444
    beh è bella come soluzione

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.