2012-06-16 9 views
36

ho la seguente classe:operatori staffa sovraccarico [] per ottenere e impostare

class risc { // singleton 
    protected: 
     static unsigned long registers[8]; 

    public: 
     unsigned long operator [](int i) 
     { 
      return registers[i]; 
     } 
}; 

come potete vedere ho implementato l'operatore parentesi quadre per "ottenere".
Ora vorrei per la sua attuazione per l'impostazione, cioè .: risc[1] = 2.

Come si può fare?

risposta

52

Prova questo:

class risc { // singleton 
protected: 
    static unsigned long registers[8]; 

public: 
    unsigned long operator [](int i) const {return registers[i];} 
    unsigned long & operator [](int i) {return registers[i];} 
}; 
+11

È possibile anche restituire un 'const lunga e'. Se non fosse un tipo nativo, allora sarebbe preferibile in quel modo, ma per tipi come 'long' va bene restituirlo per valore. –

+0

Ottimo lavoro ... Grazie! – SagiLow

+0

Nota che sarebbe una buona idea di aggiungere un test sui per assicurarsi che sia un numero compreso tra 0 e 7 compreso. E quando si ha a che fare con tipi molto più complessi di un lungo, generalmente si crea una classe di riferimento (riscDataRef) che contiene le informazioni necessarie per consentire di apportare modifiche alla classe principale. –

9

è necessario restituire un riferimento dal vostro operator[] modo che l'utente della classe usarlo per impostare il valore. Quindi la firma della funzione sarebbe unsigned long& operator [](int i).