2012-06-16 15 views
36

tengo la clase siguiente:operadores del soporte de sobrecarga [] para obtener y establecer

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

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

como se puede ver He aplicado el operador corchetes para "obtener".
Ahora me gustaría implementarlo para la configuración, es decir: risc[1] = 2.

¿Cómo se puede hacer?

Respuesta

52

Prueba esto:

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

También puede devolver un '' const larga y. Si no fuera un tipo nativo, entonces sería preferible, pero para tipos como 'largo 'está bien devolverlo por valor. –

+0

Funciona genial ... ¡Gracias! – SagiLow

+0

Tenga en cuenta que sería una buena idea agregar una prueba en i para asegurarse de que sea un número entre 0 y 7 inclusive. Y cuando se trata de tipos mucho más complejos que largos, generalmente se crea una clase de referencia (riscDataRef) que contiene la información necesaria para permitirle hacer cambios a la clase principal. –

9

Debe devolver una referencia desde su operator[] para que el usuario de la clase lo use para establecer el valor. Entonces, la firma de la función sería unsigned long& operator [](int i).