Wert am Index X lesen und Setzen mit operator[]?
-
Kleines Zeichen große Wirkung
inline int& /* <-- referenz zurueckgeben */ operator[](const int &index){ if(index<0 || index >= getOptCount()) return -1; return m_aiOptions[index]; }
-
Technisch reicht ein einzelnes Zeichen aus: "int**&** operator[](int index){...}". Praktisch solltest du für diesen Fall die Fehlerbehandlung anders durchführen (d.h. dir Gedanken darüber machen, wohin die Zuweisung "objekt[-1]=5;" schreiben sollte).
PS: primitive Datentypen kannst du gerne als Wert übergeben

-
hmm ok müsste aber in der Funktion bei SET nihc sowwas wie
m_aiOptions[index]=....;quaise ne zuweisung? ich mach ja sons tnur ein return
-
BorisDieKlinge schrieb:
hmm ok müsste aber in der Funktion bei SET nihc sowwas wie
m_aiOptions[index]=....;quaise ne zuweisung? ich mach ja sons tnur ein return
Nein. Die Zuweisung findet nicht in der Funktion sondern im aufrufenden Code statt.
-
Ja, du machst nur ein return - allerdings gibst du eine Referenz auf ein Element deiner Klasse zurück. Der aufrufende Code nimmt diese Referenz und kann über sie dem Element etwas zuweisen.
-
int &operator[](size_t index) { if(index >= getOptCount()) throw std::out_of_range(); return m_aiOptions[index]; }1. Bei builtin-Typen lohnt sich eine const-Referenz nicht, da das kopieren genauso schnell ist, der Zugriff aber schneller!
2. int benutzt man nicht für Längen oder Positionsangaben! Eher unsigned oder richtigerweise size_t!
3. wirf ne Exception. Woher soll man sonst wissen, das -1 kein gültiger Wert ist?
-
jo habs so gemacht:
inline int &operator[](UINT &index){ if(index<0 || index>= getOptCount()) ASSERT(index); return m_aiOptions[index]; }
-
aber der referenz effekt tritt nur für (SET) die Operatorübrladung in kraft oder?
-
Der "Referenzeffekt" tritt immer auf, wenn der op[] verwendet wird. Ob du ihn nutzt, ist dann deine eigene Angelegenheit.
-
BorisDieKlinge schrieb:
jo habs so gemacht:
inline int &operator[](UINT &index){ if(index<0 || index>= getOptCount()) ASSERT(index); return m_aiOptions[index]; }Ne! UINT als Parameter ist falsch (size_t), dann übergib keine Referenz! Außerdem benutzt man ASSERT anders!