» »

polje objektov:eek???

polje objektov:eek???

fshat ::

Pozdravljeni!
Prosim, mi kdo pomaga, KAJ JE TO POLJE OBJEKTOV?
Seveda imamo klaso, (c++), objekti so napisani, vse variable so jim inicializirane, kaj naj bi potem bilo POLJE OBJEKTOV?

V en element polja damo objekt. A to pomeni kaj?
Objekt ima ime in naslov.
Kaj je pa vrednost objekta
Najlepša hvala če mi kdo pomaga!:)

technolog ::

To je polje 10 Objekt-ov:

Objekt polje_objektov[10];

Zgodovina sprememb…

fshat ::

Hvala za odgovor!
Ampak meni ni vse skroz jasno!
Če imam klaso, pa noter še definirane objekte,
npr klasa: avto
objekti: BMW, Citroen, Ford

P.s pa kaj je v bistvu VREDNNOST od posameznega elementa polja?
Ali je vredmost prvega polje [0] enostavno BMW???

Še enkrat hvala vnaprej!

ali lahko pišem enostavno:
polje[0]= BMW;
polje[1]=Citroen itn?
Hvala vnaprej!

Zgodovina sprememb…

  • spremenilo: fshat ()

b00mer ::

Razred Avto..kreiras objekte BMW, Citroen,Ford..

Vrednost posameznega polja je objekt se pravi BMW, CItroen, Ford ...odvinso od indexa v polju.

(java..se mi zdi da je podobno)
Avto polje_objektov[] = new Avto[10];

polje_objektov[0] = new Avto("Bmw"); //Ustrezen konstruktor

boogie_xlr ::

c++ razrede znaš kazalcev pa ne? http://www.cplusplus.com/doc/tutorial/p...

technolog ::

Za to nalogo sploh ne rabiš kazalcev.

boogie_xlr ::

Ne rabiš kazalcev, rabiš pa znanje kazalcev, če želiš vedet kaj se nahaja tam, ko avtor teme sprašuje.

technolog ::

Amm ne.

V Javi je polje objektov res polje kazalcev na objekte (drugače se ne da), v C++ pa imaš lahko dejansko polje objektov, brez kazalcev.

fshat ::

OK, prav to je bilo mišljeno:
če npr napišem:

polje[0]= BMW;

potem je to pravilno?
Samo preverjam!
Hvala vnaprej!

technolog ::

Avtomobil polje[] = {BMW, Ford, Fiat};

Tole ustvari polje treh avtomobilov.

technolog ::

oz. bolje

Avto polje[] = {Avto("BMW"), Avto("Ford"), Avto("Fiat")};

Zgodovina sprememb…

boogie_xlr ::

polje[x] je še vedno kazalec... na prvi byte objekta.

technolog ::

Ne. V C++ dejansko ne. C++ se zaveda objekta, se pravi da ga zna primerno kopirat (s copy/move konstruktorjem) ali uničit. To je več kot samo kazalec na prvi byte.

Kar s tem mislim, če narediš tole

Avtomobil a = b;

v tem primeru bo C++ kopiral objekt, ne samo pointerja.

To drži za C. Tam so structi dejansko samo to, kot si napisal. Tam dejansko uporabiš memcpy().

Zgodovina sprememb…

boogie_xlr ::

Gleda, kateri tip je.
Drugače pa pri statičnih objektih
Avtomobil a = b;
dejansko skopira objekt byte po byte in ne preko copy konstruktorjev.
Pri dinamični alokaciji pomnilnika pa seveda skopiraš kazalec, zato si primoran uporabljati kopirne konstruktorje.
Če bi uporabljal copy konstruktor, bi izgledalo takole:
Avtomobil a = Avtomobil(b);
Seveda pa mora biti copy konstruktor definiran in implementiran.
C++ je na bolj nizkem nivoju kot java oz. drugi visokonivojski jeziki.
Če si ga pa interpretiraš kot visokonivojskega, potem pa je to čist tvoja stvar.

technolog ::

dejansko skopira objekt byte po byte in ne preko copy konstruktorjev.


To ti misliš. Še vedno se uporabi copy constructor, le da je ta privzet (implciten), eg. default copy constructor, ki naredi točno to - skopira byte po byte.

Kot statičen objekt najbrž misliš POL (plain old data).

Če bi uporabljal copy konstruktor, bi izgledalo takole:
Avtomobil a = Avtomobil(b);


To je isto kot moj primer. Copy constructor se v mojem primeru implicitno kliče (če ga ni, se uporabi shallow kloniranje, glej zgoraj).

V obeh primerih a in b "kažeta" na druge podatke (na kopijo). Kažeta v narekovajih, ker interno je to seveda kazalec, konceptualno pa ni, je objekt. To je točka, kjer C++ naredi ovinek za 180 glede na C.

C++ je na podobnem nivoju kot java (oba sta precej visokonivojska). Sploh, če gledaš C++11.

Zgodovina sprememb…

boogie_xlr ::

Ja sej fora je, da ti razmišljaš visokonivojsko(teorija, koncepti), jaz pa nizkonivojsko(bits and bytes, kazalci). Oboje se pa pokriva in dopolnjuje.

technolog ::

Razmišljam tako nivojsko, kot je nivojski jezik.

Če delam v Ruby-u, je to visoko objektno, če delam C, je absolutno nizkonivojsko, C++ nekaj vmes, potrebne stvari iz Cja in gratis še dobro OO prakso. Vse ima svoj namen in uporabo.

Je pa lepo, da ti C++ ponudi da imaš lahko polje kazalcev na objekte, ali pa kar polje objektov inlinanih (to niso pointerji, tako kot mi hočeš prodat ti, je zgolj nek odmik v ASM kodi). Seveda morajo biti potem objekti fiksne dolžine, da se lahko računa pomnilniške naslove.

Java te recimo forsira samo na prvo varianto. Si se kdaj vprašal, zakaj je java tako požrešna z RAM-om? No, zato. Pointer zna včasih vzet več kot podatek sam, sploh v primeru 64 bitnih naslovov.

boogie_xlr ::

No, to si pa lepo napisal. polje[x] je torej pointer + odmik.
Nikakor pa nisem mislil na polje kazalcev, ki pa je spet čisto druga zgodba.
Remember that if an array, its name can be used just like a pointer to its first element.


Vredno ogleda ...

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

"Dinamicna" sprememba razreda v C++

Oddelek: Programiranje
131910 (1302) Spura
»

[C] struct in int[] (strani: 1 2 )

Oddelek: Programiranje
657292 (6365) MrBrdo
»

Visual C# naloga

Oddelek: Programiranje
71313 (1118) ql000
»

Programiranje v C++

Oddelek: Programiranje
352558 (1416) krneki0001
»

Array iz function pointer-jev

Oddelek: Programiranje
121296 (1171) OwcA

Več podobnih tem