[ marko000 @ 22.05.2003. 02:04 ] @
imam jedno pocetnicko(poluglupo) pitanje..

ako imam apstraktnu klasu aps
i hocu da definisem u novoj klasi niz opjekata klasa izvedenih iz pas klase
zasto ne mogu da koristim aps *niz i pristupam tim clanovima preko indeksa(niz[0],niz[1] itd..) vec moram da niz definisem kao aps **niz?
[ Reljam @ 22.05.2003. 02:50 ] @
Apstraktni objekti ne mogu da se instanciraju (ne mozes da uradis aps a;), tako da ne mozes ni da napravis niz apstraktnih objekata.

Takodje ne mozes da napravis niz ne-apstraktnih objekata A i da ih onda referenciras kroz *B (gde je B izvedeno iz A), a zvuci kao da si to opisao.
[ marko000 @ 22.05.2003. 12:52 ] @
OK,kako onda da koristim klasu koja treba da sadrzi niz odredjenih objekata razlicitog tipa,izvedenih iz apstraktne klase,konkretno ako imam predmet za police...klasa predmet je apstraktna...neka predmeti recimo budu knjige,kasete i diskovi;kako da definisem policu koja ima odredjenu nosivost i na nju mogu da stavljam i uzimam predmete razlicitog tipa?
[ Reljam @ 22.05.2003. 20:20 ] @
Pa bas onako kako si gore napisao, pomocu duplog pointera: Predmet **niz;
[ marko000 @ 23.05.2003. 11:13 ] @
mislim da sam dosao teorijski do resenja ;)
posto se radi o apstraktnoj klasi,objekti mogu biti razlicite vrste a u niz ne moze da se pakuje vise razlicitih vrsta vec samo jedan tip podataka...kada definisem **p definisao sam niz pokazivaca te tako nema problema...u svakom slucaju hvala puno

marko
[ marko000 @ 23.05.2003. 12:44 ] @
hmmm...jos jedna mala nejasnoca

ako imam:

Podatak **niz; //gde je podatak apstraktna klasa

zasto prostor za niz dodeljujem sa

niz=new Podatak *[..neki broj..];
[ Dragi Tata @ 23.05.2003. 13:54 ] @
Možda sam već dosadan, ali ti najtoplije savetujem da ne koristiš te duple zvezde, nego lepo da uzmeš

Code:

vector <Podatak*> niz;


Veruj mi, mnogo je bolje.
[ leka @ 24.05.2003. 03:38 ] @
Jesi, dosadan si...

Elem od programera zavisi da li će koristiti pokazivače ili neće. Da budem najiskreniji pa da javno iznesem šta mislim - svako ko kuka o pokazivačima (a na to kukaju svi ljudi koji se bave razvojem softvera u drugim jezicima) treba odmah da prestane da programira u C/C++ i da se pozabavi nekim jezikom koji nema pokazivače, niti namerava da ima... :)

A sada ja malo ja budem dosadan... - Naime, smatram lično da je UPRAVO draž (što napisa jedan mnogo pametniji čovek od mene u jednom članku negde u nekim novinama) programiranja u C/C++ BAŠ korišćenje pokazivača da bi se došlo do kompaktnijeg izvršnog koda, za koji ne treba NNNN Mb RAM-a, NNN GB tvrdog diska i NN GHz procesor(i).

No, ovo je možda za neku diskusiju tipa "programerska filosofija". :)

Ne znam... čovek mora nekada da sedne i razmisli da li želi da programira nisko, ili visoko. Ako odabere prvo - koristiće pokazivače kao bela lala, ako odabere drugo, koristiće STL.

E, sada još malo filosofije... U pitanju je kreativnost - koristiti gotove STL stvari po meni čoveku ostavljaju sve manje i manje prostora za kreativni rad. Uglavnom se onda čitav posao svodi na instanciranje tamo nekih objekata, vezivanje istih na pravi način, postavljanje nekih relacija, akcija, reakcija, i to je to. "HighLevel" programer je sa MOG stanovištva najobičnija radna snaga i generalno svako ko vidi/shvata poentu STL-a i svih sličnih stvari (JAVA je fantastičan primer) zna da sam u pravu, jer je to osetio na svojoj koži.
[ -zombie- @ 24.05.2003. 03:49 ] @
reinventing the wheel 4ever!

asm 4ever!


real programmers use

copy con > virus.exe
[ Reljam @ 24.05.2003. 04:34 ] @
Leka, nemoj tako, DT ukazuje na vrlo dobru alternativu. Naravno da je do programera da li ce da koristi pokazivace, C++, neki skript jezik ili ce da ide na plazu. Ali, IMHO, greska je predstavljati kreativnost u programiranju kao koriscenje pokazivaca i optimizovanje na niskom nivou. Kreativnost je u dizajnu sistema, u necemu malo vecem, u biblioteci klasa, itd. Optimizacija se prvo radi na visokom nivou, a dosta kasnije na niskom. Nije tesko koristiti pointere, tesko je napraviti neki veci sistem koji je pritom ekstenzibilan i jeftin za odrzavanje.

Having said that, mislim da je bolja putanja za ucenje da se prvo ovlada pointerima, jer ce i pored STLa Marko morati kad tad sa tim da se suoci. Ali kasnije, kada jedanput to nauci / izvezba, nema vise svrhe izmisljati toplu vodu - onda treba koristiti STL.

Sto se tice jezika bez pointera, takvih vise prakticno i nema (osim ako se neko ne uhvati stare verzije VBa). Imaju doduse mnogo jednostavnije pointere.

Citat:
leka:"HighLevel" programer je sa MOG stanovištva najobičnija radna snaga i generalno svako ko vidi/shvata poentu STL-a i svih sličnih stvari (JAVA je fantastičan primer) zna da sam u pravu, jer je to osetio na svojoj koži.


Zanimljiva ideja. Cisto diskusije radi, koji programeri po tebi onda nisu radna snaga? Mislim cime se oni bave po ceo dan?
[ degojs @ 24.05.2003. 10:39 ] @
Citat:
leka:
U pitanju je kreativnost - koristiti gotove STL stvari po meni čoveku ostavljaju sve manje i manje prostora za kreativni rad. Uglavnom se onda čitav posao svodi na instanciranje tamo nekih objekata, vezivanje istih na pravi način, postavljanje nekih relacija, akcija, reakcija, i to je to.


Auuu..
Od kad je to izmisljanje tople vode kreativnost?
Pa majku mu, koja je osnovna poenta OOP-a?
I ko ce to da kaze gde se konacno treba zaustaviti ako krenes tim putem (vidi post zombija)?
U svoj toj prici, gde je tu produktivnost? I ko ce to da placa - da ti radis ono sto mislis da je ove nedelje cool? Ako se radi za svoju dusu ajd jos i da razumem (mada i tada - koja je poenta ponavljanja istog???)

Bez ljutnje, al' zvucis kao da ti je programiranje bolje od seksa.
[ marko000 @ 24.05.2003. 23:02 ] @
sve je to lepo sto ste vi napisali ali meni niko ne odgovori na pitanje ;)))))

salim se,stvarno bi mi znacilo da mi neko obajsni u cemu je fora sa

Predmet **pp=new Predmet *[...int...];

ako je Predmet apstraktna klasa


pozdrav
[ Časlav Ilić @ 25.05.2003. 11:23 ] @
Šta te konkretno zbunjuje? Tim kodom rezervisaćeš prostor za niz pokazivača na klasu Predmet, tj. neće doći do kreiranja instanci klase, pa nema veza što je apstraktna.
[ Dragi Tata @ 25.05.2003. 13:19 ] @
Citat:
leka:
Jesi, dosadan si...


Hvala, trudim se :)

Citat:
leka:
Elem od programera zavisi da li će koristiti pokazivače ili neće. Da budem najiskreniji pa da javno iznesem šta mislim - svako ko kuka o pokazivačima (a na to kukaju svi ljudi koji se bave razvojem softvera u drugim jezicima) treba odmah da prestane da programira u C/C++ i da se pozabavi nekim jezikom koji nema pokazivače, niti namerava da ima... :)


A ko je protiv pokazivača? Pokazivače treba koristiti za ono za šta su originalno i napravljeni - da se drži adresa neke promenljive/objekta u njoj. Ja sam protiv korišćenja C-like nizova, jer su nečitljivi i zahtevaju puno koncentracije kad se radi sa njima. Što se performansi tiče, STL šabloni su pravljeni tako da omoguće zero-overhead; vector u odnosu na C nizove nije ni malo sporiji. Mada, istina je da u nekim implementacijama (npr VC++) korišćenje C++ standardne biblioteke implicira i povezivanje (statičko ili dinamičko) sa još jednom dodatnom bibliotekom.

Citat:

A sada ja malo ja budem dosadan... - Naime, smatram lično da je UPRAVO draž (što napisa jedan mnogo pametniji čovek od mene u jednom članku negde u nekim novinama) programiranja u C/C++ BAŠ korišćenje pokazivača da bi se došlo do kompaktnijeg izvršnog koda, za koji ne treba NNNN Mb RAM-a, NNN GB tvrdog diska i NN GHz procesor(i).


Kao što rekoh gore, ništa od toga nećeš da postigneš ako koristiš C nizove umesto STL šablona.

Citat:

E, sada još malo filosofije... U pitanju je kreativnost - koristiti gotove STL stvari po meni čoveku ostavljaju sve manje i manje prostora za kreativni rad. Uglavnom se onda čitav posao svodi na instanciranje tamo nekih objekata, vezivanje istih na pravi način, postavljanje nekih relacija, akcija, reakcija, i to je to. "HighLevel" programer je sa MOG stanovištva najobičnija radna snaga i generalno svako ko vidi/shvata poentu STL-a i svih sličnih stvari (JAVA je fantastičan primer) zna da sam u pravu, jer je to osetio na svojoj koži.


IMHO, STL te oslobađa od nekreativnog rada - recimo praviti binary search "od nule" je dobra vežba za studente, ali za profesionalnog programera je ne samo gubljenje vremena, već i dosadno. Kakva mi je to kreativnost da se otvori neki udžbenik o algoritmima i da se iskodira nešto odatle u nekom programskom jeziku?
[ alkal @ 25.05.2003. 14:51 ] @
Da apsolviramo:

Ne može se napraviti objekat tipa apstraktne klase iz
jednostavnog razloga što bi takav objekat bi neodređen.
Stoga, mogući su jedino pokazivači i upućivači (reference)
na objekte tipa apstraktne klase.

Recimo da imaš apstraktnu klasu Predmet i izvedene klase
Knjiga i Frizider, a treba ti niz Predmeta.
Budući da ne možeš koristiti konkretne objekte tipa Predmet
napravićeš niz pokazivača na Predmet.

Ukoliko je niz konstantne dužine:
Code:

Predmet* niz[5];

Ako dužina niza nije poznata u trenutku prevođenja, koristićeš
dinamičko kreiranje niza (pretpostavljam da znaš vezu između
nizova i pokazivača):
Code:

Predmet* *niz;
// ... Ucitaj duzinu niza - n.
niz = new Predmet* [n];

niz[0] = new Knjiga();
niz[1] = new Frizider();
// ...

Ukoliko ti ovo izgleda ružno, koristi std::vector<Predmet*> koji
pruža mnogo udobniji rad.
[ marko000 @ 26.05.2003. 03:07 ] @
alkale ti si kralj...
ne mogu da ti objasnim koliko si mi pomogao
veliki pozdrav

marko