web-dev-qa-db-fra.com

Opérateurs de support de surcharge [] à obtenir et à définir

J'ai la classe suivante:

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

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

comme vous pouvez le voir, j'ai implémenté l'opérateur de crochets pour "obtenir".
Maintenant, je voudrais l'implémenter pour le réglage, à savoir: risc[1] = 2.

Comment ceci peut être fait?

51
SagiLow

Essaye ça:

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];}
};
67
Andrew Durward

Vous devez renvoyer une référence de votre operator[] Afin que l'utilisateur de la classe l'utilise pour définir la valeur. La signature de la fonction serait donc unsigned long& operator [](int i).

10
Naveen