Mire jó az operator[]? C++ ban.
Például én még régebben egy feladathoz csináltam egy olyan struktúrát, ami egy char tömb és egy short tömb uniója volt, hogy a short értékeket bájtonként is lehessen olvasni. A tömbök indexe külön enum típusok voltak (eRegB, eRegW), tehát az értékekből lehetett tudni, hogy 1 vagy 2 bájtos értékek kellenek-e.
A struktúrán belül az u nevű unión belül voltak a b és w (byte, word) tömbök, de egy [] operatorral nem kellett ezzel vacakolni. Írás és olvasás is működött vele.
byte& operator[](eRegB n) { return this->u.b[n]; }
word& operator[](eRegW n) { return this->u.w[n]; }
Innentől úgy viselkedett, mint egy közönséges tömb. mindíg olyan tömb, amilyen indexet megadtam a [] jelek közé.
Kösz,hogy írtál de abból semmit sem értettem.
Ennyire profi még nem vagyok.
Az alapokat tanlom és most az operatoroknal tartok.
operator[] mit csinál?
operator++ //ezt mar tudom: obj1 + obj2
És ez operator[] mit csinál
Ha a fordító egy tömb neve után talál ilyet: [x], akkor visszaadja az x-dik elemét, vagyis meg fogja találni a tömbben az értéket, amivel dolgoznia kell.
Ha neked van egy másik struktúrád, ami nem tisztán tömb, akkor annak a neve után hiába teszel ilyet [], nem fogja tudni a fordító, hogy mit kezdjen vele, mert nem tudja, hogyan keresse meg a szükséges elemét.
Viszont ha megírod, hogy ilyenkor milyen értékkel kell dolgoznia, akkor már tudni fogja.
És pl milyen struktúra?
Már értem akkor,hogy mire használjam de ötletem sincs,hogy írjak ilyet.
Egy kis példával nem tudnátok szolgálni.
Nagyon hálás lennék érte. :)
Itt is van egy jó példa:
Itt egy osztálynak van ilyen operátor túlterhelése (operator overloading). Az osztálynak, pontosabban a belőle létrehozott objektumnak van egy tömbje, mint tulajdonság. "Normális" esetben ezt úgy érjük el egy 'obj' nevű objektumnál, hogy:
obj.tomb[x]
Viszont ha a [] operátort túlterheljük (írunk hozzá megfelelő saját operator[] metódust), akkor már így is használhatjuk:
obj[x]
A példában az objetum létrejöttekor dől el, mekkora a tömb, ezért az operator[] metódust azt is kezeli.
(Ott az objetum neve 'v', szóval úgy keresd.)
Remélem nem írtam el semmit. :)
Előzők vagyok. Két megjegyzés:
- Ez ugyanúgy működik a sima zárójelekkel is, tehát: "operator()"
- Lehet, hogy ha az alapokat tanulod, akkor nem feltétlenül az operátor túlterhelést kellene még gyakorolnod. Sőt, először a sima függvény túlterheléssel légy tisztában. :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!