Forum » Programiranje » [c++] tabela? vecih dinamicnih struktur(classou)
[c++] tabela? vecih dinamicnih struktur(classou)
elKaktus ::
zivjo imam nalogo kjer morem narest strukturo (v bistvu class kot v spodnjem programcku) kjer morem narest 50 vnosov
probal sem v tem smislu (ZA VNOS ENEGA JE SPODAJ PROGRAMCEK in dela!)
///////////////////////////
/// TAK JE PROGRAMCEK//////
//v bistvu rabm sam predlog kako bi se lotu tega... vsem predlogom se ze v naprej zahvaljujem
probal sem v tem smislu (ZA VNOS ENEGA JE SPODAJ PROGRAMCEK in dela!)
NOV * tab[50]=new NOV(); // JAVI SINTAKTICNO NAPAKO...
for(int e=0;e< 50 ; e++)
{
tab[e]->vpisi(33,'D',20.20, 100);
z
}
///////////////////////////
/// TAK JE PROGRAMCEK//////
klikni tukaj
//v bistvu rabm sam predlog kako bi se lotu tega... vsem predlogom se ze v naprej zahvaljujem
- spremenilo: elKaktus ()
Jean-Paul ::
Poskusi tako:
NOV* tab = new NOV[50];Toplo ti svetujem, da si prebereš (in poskušaš razumeti) kaj o "memory managementu" v C++-u.
Alfonzo ::
Tko se mi zdi da se v c++ ne uporablja tabelo NOV* tab = new NOV[50]; ampak se jo v c#. In tud ta k je napisu tapru post v teni se mi zdi da ti delaš v c# ne pa v c++.
elKaktus ::
ja mi je uspelo nek narest
sicer deluje samo nisem preprican ce mi dejansko na koncu programa res sprosti prostor...
pa se to bi vprasal.. ce se bo ljubilo komu kompajlat kodo , ker nevem zakaj mi zacne izpisovat sele od 17ega clena naprej ?
a mi zna kdo na hitro razlizit v cem je razliko v dostopanju na ta dva nacina
NOV * tab=new NOV[50]();
for(int e=0;e< 50; e++) {
tab[e].vpisi(rand() % 100,'c',20.20,rand() % 100);
}// tu sem dostopal s . (piko(tab[] . vpisi))
med tem ko sem tu dostopal z puscico (->)
NOV * prvi= new NOV();
prvi->vpisi(55,'d',20.20,10);
// po mojem mnenju je pravilneje dostopati z puscico (ker je dinamicen kazalec) samo drugace mi ni delalo kot z piko
ce ve kdo za kako stran kjer je ta stvar mal lepse razlozena bi bil res hvalezen...
@axon: to je C++/c in ne c#! sicer pa c# ni dost drugacen od c++ (tam je pac poudarek na objektih)
klikni tukaj
sicer deluje samo nisem preprican ce mi dejansko na koncu programa res sprosti prostor...
pa se to bi vprasal.. ce se bo ljubilo komu kompajlat kodo , ker nevem zakaj mi zacne izpisovat sele od 17ega clena naprej ?
a mi zna kdo na hitro razlizit v cem je razliko v dostopanju na ta dva nacina
NOV * tab=new NOV[50]();
for(int e=0;e< 50; e++) {
tab[e].vpisi(rand() % 100,'c',20.20,rand() % 100);
}// tu sem dostopal s . (piko(tab[] . vpisi))
med tem ko sem tu dostopal z puscico (->)
NOV * prvi= new NOV();
prvi->vpisi(55,'d',20.20,10);
// po mojem mnenju je pravilneje dostopati z puscico (ker je dinamicen kazalec) samo drugace mi ni delalo kot z piko
ce ve kdo za kako stran kjer je ta stvar mal lepse razlozena bi bil res hvalezen...
@axon: to je C++/c in ne c#! sicer pa c# ni dost drugacen od c++ (tam je pac poudarek na objektih)
Zgodovina sprememb…
- spremenilo: elKaktus ()
Gundolf ::
Tabele v c++ narediš tako, kot ti je Jean-Paul povedal:
NOV* tab = new NOV[50];
do elementov tabele dostopaš takole:
tab[x].blabla = tralala;
Moti te, ker je na tem mestu pika namesto puščice. Ampak to je pravilno. Ker spremenljivka "tab" je sicer kazalec na objekt tipa NOV (če jo initializiraš kot tabelo potem bo kazalec na prvi element tabele, a še vedno povsem običajen kazalec), ampak "tab[x]" pa ni več kazalec. "tab[x]" je pa že kar objekt tipa NOV. Pravzaprav referenca nanj, ampak brezveze zdajle nakladat o referencah. Torej delaš z "tab[x]" kot delaš z vsakim drugim objektom.
NOV* tab = new NOV[50];
do elementov tabele dostopaš takole:
tab[x].blabla = tralala;
Moti te, ker je na tem mestu pika namesto puščice. Ampak to je pravilno. Ker spremenljivka "tab" je sicer kazalec na objekt tipa NOV (če jo initializiraš kot tabelo potem bo kazalec na prvi element tabele, a še vedno povsem običajen kazalec), ampak "tab[x]" pa ni več kazalec. "tab[x]" je pa že kar objekt tipa NOV. Pravzaprav referenca nanj, ampak brezveze zdajle nakladat o referencah. Torej delaš z "tab[x]" kot delaš z vsakim drugim objektom.
elKaktus ::
hvala za pojasnilo... ja razumem zakaj se gre
(tudi reference mi niso cist tuje)
vprasal bi le se ce tisti " delete (tab); " kljub temu sprosti prostor ali ne
a bi se dalo kje videt to upravljanje (manipulacija) z prostorom .. uporabljam devcpp
(tudi reference mi niso cist tuje)
vprasal bi le se ce tisti " delete (tab); " kljub temu sprosti prostor ali ne
a bi se dalo kje videt to upravljanje (manipulacija) z prostorom .. uporabljam devcpp
Jean-Paul ::
Tile izrazi so pomensko ekvivalentni:
Edit:
Me je vmes že Gundolf prehitel.
Samo delete v primeru polja ne bo vredu, uporabiti moraš operator delete[]. V tvojem primeru torej delete[] tab;. Link
tab[e].vpisi(...); (&tab[e])->vpisi(...); (tab+e)->vpisi(...);Prav tako tudi tile:
tab->vpisi(...); tab[0].vpisi(...); (&tab[0])->vpisi(...); (tab+0)->vpisi(...); tab->vpisi();Preberi si kaj o kazalcih (pointers) in poljih (arrays).
Edit:
Me je vmes že Gundolf prehitel.
Samo delete v primeru polja ne bo vredu, uporabiti moraš operator delete[]. V tvojem primeru torej delete[] tab;. Link
Zgodovina sprememb…
- spremenil: Jean-Paul ()
elKaktus ::
ja najlepsa hvala za odgorvor ... ker mi je razjasnil precej nerazumljivih stvari ... tudi link je zelo pohvalevreden
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] QuicksortOddelek: Programiranje | 725 (561) | MrBrdo |
» | [JAVA] helpOddelek: Programiranje | 1622 (1336) | keworkian |
» | [C++] Delo s *.txt datotekamiOddelek: Programiranje | 2005 (1481) | Tr0n |
» | [Java][Naloga] SkladiOddelek: Programiranje | 1667 (1466) | bijonda |
» | [c++] Pomoč pri izdelavi std::vector "wrapperja"Oddelek: Programiranje | 1575 (1476) | zhigatsey |