Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Tindariel Forumaš(ica)
Pridružen/a: 03. 12. 2008. (00:49:03) Postovi: (71)16
Spol:
Lokacija: Zagreb
|
Postano: 19:18 uto, 18. 5. 2010 Naslov: |
|
|
[quote="Anonymous"]U main-u za videoteku imamo viticaste zagrade koje nam sredinu odjeljuju. Jel mi netko moze rec sta bi nan to tribalo oznacavat??[/quote]
Ako sam dobro shvatila neki Ginov prijašnji post, to bi trebalo značit da se pozivaju destruktori onih elemenata koji su nastali u tom bloku na kraju tog bloka, a ne tek na kraju programa.
A onaj ZG111AA ti je vraćen (pogledaj u kodu, piše da ivo ivic, ili tak netko, vraća automobil tamo gdje se ispiše 15) :)
Anonymous (napisa): | U main-u za videoteku imamo viticaste zagrade koje nam sredinu odjeljuju. Jel mi netko moze rec sta bi nan to tribalo oznacavat?? |
Ako sam dobro shvatila neki Ginov prijašnji post, to bi trebalo značit da se pozivaju destruktori onih elemenata koji su nastali u tom bloku na kraju tog bloka, a ne tek na kraju programa.
A onaj ZG111AA ti je vraćen (pogledaj u kodu, piše da ivo ivic, ili tak netko, vraća automobil tamo gdje se ispiše 15)
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
lucika Forumaš(ica)
Pridružen/a: 22. 11. 2007. (17:52:27) Postovi: (12F)16
Spol:
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
Postano: 13:46 sri, 19. 5. 2010 Naslov: |
|
|
[quote="Anonymous"]Evo jedno pitanje:
u programu imam jednu globalnu varijablu koja se koristi u strukturama. Kada cijeli program imam u jednom fajlu, kompajlira se bez problema.
Ali, kada rastavim program na *.h i na *.cpp kompajler se buni.
Ako stavim globalnu varijablu u *.h datoteku, kompajler javlja grešku. ("ime_glob_var undeclared in this scope" ili tako nekako)
Ako stavim globalnu varijablu u *.cpp datoteku, opet javlja grešku.
Kamo onda staviti globalnu varijablu?[/quote]
Stavi je u *.h datoteku, trebalo bi sve normalno radit... meni radi kak god je definiram u *.h datoteci.
Takva greška bi eventualno mogla doći ak si tu globalnu varijablu stavio u neku klasu.
Anonymous (napisa): | Evo jedno pitanje:
u programu imam jednu globalnu varijablu koja se koristi u strukturama. Kada cijeli program imam u jednom fajlu, kompajlira se bez problema.
Ali, kada rastavim program na *.h i na *.cpp kompajler se buni.
Ako stavim globalnu varijablu u *.h datoteku, kompajler javlja grešku. ("ime_glob_var undeclared in this scope" ili tako nekako)
Ako stavim globalnu varijablu u *.cpp datoteku, opet javlja grešku.
Kamo onda staviti globalnu varijablu? |
Stavi je u *.h datoteku, trebalo bi sve normalno radit... meni radi kak god je definiram u *.h datoteci.
Takva greška bi eventualno mogla doći ak si tu globalnu varijablu stavio u neku klasu.
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
JANKRI Forumaš(ica)
Pridružen/a: 10. 07. 2008. (02:30:58) Postovi: (10F)16
Spol:
Lokacija: Zagreb
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
Cobs Forumaš(ica)
Pridružen/a: 21. 01. 2008. (13:32:15) Postovi: (206)16
Spol:
Lokacija: Geto
|
Postano: 15:03 čet, 20. 5. 2010 Naslov: |
|
|
evo sad općenito primjera konstruktora i destruktora za bilo koje klase koje trebate implementirati:
Svaka klasa ima static listu pokazivača na tu klasu:
npr:
[code:1]
struct KLASA {
...
static list< KLASA* > sve_KLASE;
};
[/code:1]
kada god kreirate u main - u novu KLASU trebali bi provjerit dal postoji već neka klasa u programu koja se isto zove ( ili po ćemu ih već raspoznajete ) jer ne bi smjeli imati dvije klase istog imena.
static lista pokazivača služi kao popis svih klasa koje se koriste u programu, pa bi konstruktor otprilike trebao izgledati ovako:
[code:1]
KLASA::KLASA( ulazni parametri ){
ime = ulazno_ime;
par_1 = prvi_ulazni_parametar;
par_2 = drugi_ulazni_parametar;
// itd...
// sada treba provjeriti dal vec postoji u programu neka klasa koja se isto zove kao i ova
iterator za listu sve_KLASE;
for( odi sa iteratorom po listi sve_KLASE od pocetka do kraja ){
if( ako je ime neke KLASE iz liste sve_KLASE == ulazno_ime ) break;
}
if( iterator == kraj liste sve_KLASE ){
ubaci u listu pokazivač na ovu klasu ( this pointer )
}
// ako smo dosli do kraja liste sa iteratorom to znači da još nema takve klase pa je ubacujemo među "žive" klase
}
[/code:1]
i destruktor:
[code:1]KLASA::~KLASA(){
for( odi sa iteratorom po listi sve_KLASE od pocetka do kraja ){
if( ako je ime neke KLASE iz liste sve_KLASE == ime ){ izbaci taj pokazivač iz liste }
}
}[/code:1]
to je ono osnovno što bi konstruktori i destruktori trebali raditi!
Na taj način smo mi odredili da u programu ne postoje dvije klase istog imena i izbacili iz programa klase koje više ne koristimo.
primjer main -a:
[code:1]
int main(){
KLASA A( "PRVA" ); // u static listu sve_KLASE ubacuje se pokazivač na KLASU A
KLASA B( "DRUGA" ); // u static listu sve_KLASE ubacuje se pokazivač na KLASU B
KLASA C( "PRVA" ); // u static listu sve_KLASE NE ubacuje se pokazivač na KLASU C jer već u programu postoji klasa istog imena
// na taj način mi smo odlučili da klasa C nije "živa", dok klase B i A jesu
// naravno mi sada možemo raditi u main - u s klasom C međutim pitanje dal će sve funkcije funkcionirati na pravi način jer klasa C nije dio našeg programa
// zašto nam treba destruktor?
// u main možemo ubaciti blok naredbi!!!
{
KLASA D( "KLASA S NAJDUZIM IMENOM" ); // D se ubacuje u listu sve_KLASE
A.ispisi_ime_klase_s_najduljim_imenom(); // ispisuje se ime klase D
} // na kraju bloka poziva se destruktor svih varijabli ( i klasa ) napravljenih unutar bloka, tj. moramo KLASU D izbrisati iz liste sve_KLASE
A.ispisi_ime_klase_s_najduljim_imenom(); // sada mora ispisati ime KLASE B ( D više nije "živa" !!! )
return 0;
}
[/code:1]
eto nadam se da se ovo neće tretirati kao rješenje zadaće te da neće biti pobrisano!!! Na taj način bi se trebalo gledati dal su klase "žive" ili ne, a bez neki pomoćnih varijabla, makar se može i s tim
evo sad općenito primjera konstruktora i destruktora za bilo koje klase koje trebate implementirati:
Svaka klasa ima static listu pokazivača na tu klasu:
npr:
Kod: |
struct KLASA {
...
static list< KLASA* > sve_KLASE;
};
|
kada god kreirate u main - u novu KLASU trebali bi provjerit dal postoji već neka klasa u programu koja se isto zove ( ili po ćemu ih već raspoznajete ) jer ne bi smjeli imati dvije klase istog imena.
static lista pokazivača služi kao popis svih klasa koje se koriste u programu, pa bi konstruktor otprilike trebao izgledati ovako:
Kod: |
KLASA::KLASA( ulazni parametri ){
ime = ulazno_ime;
par_1 = prvi_ulazni_parametar;
par_2 = drugi_ulazni_parametar;
// itd...
// sada treba provjeriti dal vec postoji u programu neka klasa koja se isto zove kao i ova
iterator za listu sve_KLASE;
for( odi sa iteratorom po listi sve_KLASE od pocetka do kraja ){
if( ako je ime neke KLASE iz liste sve_KLASE == ulazno_ime ) break;
}
if( iterator == kraj liste sve_KLASE ){
ubaci u listu pokazivač na ovu klasu ( this pointer )
}
// ako smo dosli do kraja liste sa iteratorom to znači da još nema takve klase pa je ubacujemo među "žive" klase
}
|
i destruktor:
Kod: | KLASA::~KLASA(){
for( odi sa iteratorom po listi sve_KLASE od pocetka do kraja ){
if( ako je ime neke KLASE iz liste sve_KLASE == ime ){ izbaci taj pokazivač iz liste }
}
} |
to je ono osnovno što bi konstruktori i destruktori trebali raditi!
Na taj način smo mi odredili da u programu ne postoje dvije klase istog imena i izbacili iz programa klase koje više ne koristimo.
primjer main -a:
Kod: |
int main(){
KLASA A( "PRVA" ); // u static listu sve_KLASE ubacuje se pokazivač na KLASU A
KLASA B( "DRUGA" ); // u static listu sve_KLASE ubacuje se pokazivač na KLASU B
KLASA C( "PRVA" ); // u static listu sve_KLASE NE ubacuje se pokazivač na KLASU C jer već u programu postoji klasa istog imena
// na taj način mi smo odlučili da klasa C nije "živa", dok klase B i A jesu
// naravno mi sada možemo raditi u main - u s klasom C međutim pitanje dal će sve funkcije funkcionirati na pravi način jer klasa C nije dio našeg programa
// zašto nam treba destruktor?
// u main možemo ubaciti blok naredbi!!!
{
KLASA D( "KLASA S NAJDUZIM IMENOM" ); // D se ubacuje u listu sve_KLASE
A.ispisi_ime_klase_s_najduljim_imenom(); // ispisuje se ime klase D
} // na kraju bloka poziva se destruktor svih varijabli ( i klasa ) napravljenih unutar bloka, tj. moramo KLASU D izbrisati iz liste sve_KLASE
A.ispisi_ime_klase_s_najduljim_imenom(); // sada mora ispisati ime KLASE B ( D više nije "živa" !!! )
return 0;
}
|
eto nadam se da se ovo neće tretirati kao rješenje zadaće te da neće biti pobrisano!!! Na taj način bi se trebalo gledati dal su klase "žive" ili ne, a bez neki pomoćnih varijabla, makar se može i s tim
|
|
[Vrh] |
|
konjina Forumaš(ica)
Pridružen/a: 13. 04. 2010. (21:55:18) Postovi: (2C)16
Lokacija: po livadama i šumama
|
|
[Vrh] |
|
i v a n č i c a Forumaš(ica)
Pridružen/a: 15. 02. 2007. (10:33:16) Postovi: (2E)16
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
markotron Forumaš(ica)
Pridružen/a: 26. 10. 2008. (12:07:29) Postovi: (95)16
Spol:
Lokacija: Umag
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
tmarusca Forumaš(ica)
Pridružen/a: 28. 06. 2009. (20:53:52) Postovi: (59)16
Spol:
Lokacija: 1/039
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
tmarusca Forumaš(ica)
Pridružen/a: 28. 06. 2009. (20:53:52) Postovi: (59)16
Spol:
Lokacija: 1/039
|
|
[Vrh] |
|
|