» »

[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!)


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


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.

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

Jean-Paul ::

Tile izrazi so pomensko ekvivalentni:
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…

elKaktus ::

ja najlepsa hvala za odgorvor ... ker mi je razjasnil precej nerazumljivih stvari ... tudi link je zelo pohvalevreden0:)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Quicksort

Oddelek: Programiranje
6726 (562) MrBrdo
»

[JAVA] help

Oddelek: Programiranje
141622 (1336) keworkian
»

[C++] Delo s *.txt datotekami

Oddelek: Programiranje
192006 (1482) Tr0n
»

[Java][Naloga] Skladi

Oddelek: Programiranje
51667 (1466) bijonda
»

[c++] Pomoč pri izdelavi std::vector "wrapperja"

Oddelek: Programiranje
81575 (1476) zhigatsey

Več podobnih tem