|
[ 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
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|