Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Operator[]() i Pointer na klasu ...

[es] :: C/C++ programiranje :: Operator[]() i Pointer na klasu ...

[ Pregleda: 1742 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.ADSL.neobee.net.



+1 Profil

icon Operator[]() i Pointer na klasu ...28.12.2006. u 18:06 - pre 176 meseci
Jedno pitanje:

Ukoliko recimo imam sledece:

Code:

class Nesto
{
//...
public:
//...
    int operator[](int index);
};


odnosno overload operatora [] ...

i u kodu ovakvu konstrukciju

Code:

Nesto* nesto = new Nesto();

//...

int i = Nesto->operator[](22);

//...

delete nesto;


Da li je moguce izraz Nesto->operator[](22); zapisati na neki jednostavniji nacin?
Odnosno da nije u pitanju pointer na instancu klase, pisalo bi se Nesto[22] a ovako?

Kompajler prijavljuje greske na:

Nesto->[](22);
Nesto->[22];

i naravno

Nesto[22] nije to sto nama treba ;) (odnosno meni)

jedino sto mogu da smislim pametno bi zapravo bilo (mada mi i to nije elegantno)

(*Nesto)[22]; // da li su potrebne zagrade u ovom slucaju?

Odnosno cesto u svojim nekim konstrukcijama stizem do situacije kada moram da napisem nesto poput:

Code:

   StatusBar->Panels->operator [](1)->Text = "Bla bla"; // ...


a recimo alternative su:

Code:

   StatusBar->(*Panels)[1]->Text = "Bla bla"; // ...


Odnosno da li je to eevivalentno sledecem:

Code:

   StatusBar->*Panels[1]->Text = "Bla bla"; //...


(Sa ovim poslednjim bih mogao da zivim ... :) )

Prisecam se nesto operatora .* i ->* pa ko rekoh jel moze ovako opusteno ili moram sa jos gomilom zagrada?
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.ADSL.neobee.net.



+1 Profil

icon Re: Operator[]() i Pointer na klasu ...28.12.2006. u 18:30 - pre 176 meseci
:)

Zapravo sam nasao o cemu se radi ... :)

ovo poslednje

Code:

   StatusBar->*Panels[1]->Text = "Bla bla"; //...


Javlja gresku u Borland C++ Builder-u zato sto je rec o VCL-u preuzetom iz Delphi-ja ... :)
Izgleda da je to legitiman C++ izraz ali posto je u pitanju Pascal code koji je zapravo oblika

Code:

__property TPanel* Panels[] = { read = GetPanels, write = SetPanels }; 
//Ovo nije citirano iz helpa nego napamet mozda se getter i setter razlikuju po nazivu


onda nije u pitanju pointer na klasu/strukturu koja ima overloadovan [] nego neka Borlandova extenzija ... bla bla ...

U ovom slucaju jedino resenje je tipa:

Code:

    (*(StatusBar->Panels))[1]->Text = "Bla bla"; //i dalje nezgrapno za pisanje ... :)

 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Operator[]() i Pointer na klasu ...28.12.2006. u 18:42 - pre 176 meseci
U chemu je u stvari toj problem?
Shto je (*Nesto)[22] "ruzhno"?
Ili neshto sasvim drugo, ne razumem bash najbolje tvoj post?

U svakom sluchaju proguglaj "C++ operator precedence".
Ako nisi siguran da li su potrebne zagrade onda ih za svaki sluchaj stavljaj, kod nije nishta "ruzhniji", ne mogu bash da poistovetim lepotu koda sa brojem zagrada.
Ako ti bash treba ekstra lep ("na oko") i pregledan kod onda predji na Ruby ili Lua.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4883
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+631 Profil

icon Re: Operator[]() i Pointer na klasu ...28.12.2006. u 19:42 - pre 176 meseci
Sta konkretno hoces da uradis u okviru VCL-a sa preklopljenim [], pa to izgleda ruzno ?

U primeru koji si naveo (verovatno greskom u kucanju) koristis veliko slovo N (klase) umesto malo (objekta).
Takodje, razmisli o ampersandu:

int operator[](int index);
int& operator[](int index);

Eventualno pogledaj ovih par (VCL) threadova:

http://tinyurl.com/yjocvd
http://tinyurl.com/yhoofj


 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Operator[]() i Pointer na klasu ...29.12.2006. u 17:38 - pre 175 meseci
I za tim koriscenjem operatora[] tako sto kazes "operator[]" zaista nema potrebe.
De si Deda...
 
Odgovor na temu

vlaiv
Vladimir Vlaisavljevic
Novi Sad

Član broj: 15993
Poruke: 352
*.ADSL.neobee.net.



+1 Profil

icon Re: Operator[]() i Pointer na klasu ...04.01.2007. u 01:43 - pre 175 meseci
Ostadoh duzan odgovor i pojasnjenje ...

Citat:
X Files: Sta konkretno hoces da uradis u okviru VCL-a sa preklopljenim [], pa to izgleda ruzno ?

U primeru koji si naveo (verovatno greskom u kucanju) koristis veliko slovo N (klase) umesto malo (objekta).


Nisam bas skontao ovo oko velikog/malog slova ... VCL ... tipovi pocinju sa T (njihovo pravilo)... a objekti kako ko voli (oni izbace T) ...

... sorry, vidim na sta mi ukazujes ... da, greska u kucanju ... nema veze sa temom ...

Citat:
DjoleReject: I za tim koriscenjem operatora[] tako sto kazes "operator[]" zaista nema potrebe.


Da zapravo ima potrebe!

Ako je nesto pointer na objekat a operator [] je predefinisan za tu klasu BCB nece da ti da priliku da

uradis sledece:

Code:

    pointer_na_objekt->[12] = 24; //lupam


nego moras:

Code:

    (*pointer_na_objekt)[12] = 24;


ili

Code:

    pointer_na_objekt)->operator[](12) = 24;


E sad, ona kobasica od primera ... x->y->z->operator[](12) = 24;
je zapravo sluzila da pojasnim sta mi tu nije zapravo "lepo"

zasto se nesto poput x->y->z->operator[](12) = 24; ne moze napisati kao

x->y->z->[12] ili bar

x->y->*z[12]

nego se mora izvoditi konstrukcija tipa

(*(x->y->z))[12] = 24;

Pa pod pretpostavkom da se i kod x i y preklapa operator [] onda dolazimo do papazjanije tipa

x->operator[](1)->y->z->operator[](12) = 24;

ili ne daj boze:

(*((*(x)[1])->y->z))[12] = 24;

hocu da izbegnem visak zagrada a bogami i pisanje operator[]() konstrukcije ali BCB ima svoje misljenje na tu temu ... ;)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Operator[]() i Pointer na klasu ...

[ Pregleda: 1742 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.