2012-06-16 31 views
36

ben şu sınıf var ayarlayın:Aşırı yük braket operatörleri [] almak ve

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

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

sana "almak" için köşeli parantez operatörü uyguladık görebilirsiniz.
Şimdi bunu ayar için uygulamak istiyorum, yani: risc[1] = 2.

Nasıl Yapılır?

cevap

52

bu deneyin:

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

Ayrıca '& bir' const uzun dönebilirsiniz. Eğer yerel bir tip değilse, o zaman bu yol tercih edilirdi, ancak 'long' gibi türler için değerlere geri dönmek iyidir. –

+0

Harika çalışıyor ... Teşekkürler! – SagiLow

+0

0 ve 7 arasında bir sayı olduğundan emin olmak için bir test eklemenin iyi bir fikir olacağını unutmayın. Ve çok daha karmaşık türlerle uzun bir süre uğraşırken, genellikle ana sınıfta değişiklik yapmanıza izin vermek için gerekli bilgileri tutan bir referans sınıfı (riscDataRef) yaratırsınız. –

9

operator[]'dan bir referans döndürmeniz gerekir, böylece sınıfın kullanıcısı değeri ayarlamak için bunu kullanır. Böylece işlev imzası unsigned long& operator [](int i) olacaktır.

İlgili konular