Kezdőoldal » Számítástechnika » Programozás » Mire jó az operator[]? C++ ban.

Mire jó az operator[]? C++ ban.

Figyelt kérdés
Mire van?Mikor kell használni,hogy hívódik meg?
2012. júl. 25. 13:53
1 2
 1/15 A kérdező kommentje:
Mi szokott lenni a definíciójában?
2012. júl. 25. 13:53
 2/15 anonim ***** válasza:

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é.

2012. júl. 25. 14:18
Hasznos számodra ez a válasz?
 3/15 A kérdező kommentje:

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

2012. júl. 25. 14:21
 4/15 anonim ***** válasza:

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.

2012. júl. 25. 14:27
Hasznos számodra ez a válasz?
 5/15 A kérdező kommentje:

É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. :)

2012. júl. 25. 14:37
 6/15 anonim ***** válasza:

Itt is van egy jó példa:

[link]


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. :)

2012. júl. 25. 16:32
Hasznos számodra ez a válasz?
 7/15 anonim ***** válasza:

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. :)

2012. júl. 25. 16:40
Hasznos számodra ez a válasz?
 8/15 A kérdező kommentje:
Azzal már tisztában vagyok.
2012. júl. 25. 23:15
 9/15 A kérdező kommentje:
A cout és clog közt mi a különbség?
2012. júl. 26. 10:13
 10/15 anonim ***** válasza:
Egyik a szabv. kimenetre, a másik a logging streambe ír.
2012. júl. 26. 10:34
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!