Class or struct

poruka: 9
|
čitano: 10.111
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
class or struct

Ako san dobro svatia osnovna razlika izmedju class i struct je sto jedno podrazumjeva javni a drugo privatni pristup. Ja san nekako navika na class i cini mi se lakse dodat public u kod i rjesit problem ali vidin da dosta kodova koji se pisu ode po forumu koriste bas struct i sad mi nije jasno postoji li neka razlika mogucnost zasto jedno a ne drugo pa vecina pise struct. Tek ucin nemojte zamjerit na pitanju ali mi nikako nije jasno zasto vecina pise struct ako je samo gore navedeno razlika.

 

 

 

 
0 0 hvala 0
16 godina
neaktivan
offline
Class or struct

Zaboravio si navesti o kojem programskom jeziku radi.

 

Npr. u C#-u, i kod klasa i kod struktura možeš imati javni i/ili privatni pristup varijablama. Razlika je u tome što su strukture value tip, dok su klase reference tip, te kod struktura nema nasljeđivanja (za razliku od klasa).

The laws of nature are constructed in such a way as to make the universe as interesting as possible. - Freeman Dyson, Imagined Worlds
Poruka je uređivana zadnji put pon 21.12.2009 15:51 (hrx).
 
0 0 hvala 0
15 godina
neaktivan
offline
Class or struct

c++

 

btw value tip nerazumin sta bi to trebalo znacit moze pojasnjenje ?

 
0 0 hvala 0
17 godina
protjeran
offline
Class or struct

U pravilu struct dolazi iz C-a i namjena mu je da grupira samo podatke (podatkovne članove) i po defaultu svi članovi su mu javni (public). Klase su već zamišljene da mogu grupirati podatke i funkcije (metode) i po defaultu svi članovi su privatni (private). No u C++u i strukture mogu grupirati podatke i metode. Tako da, u C++u razlike između struct i class su tek u primjeni i defaultnom pravu pristupa. Recimo, ja koristim struct ako grupiram samo podatke, dok ako je riječ i o funkcijama onda to stavim kao klasu.

Poruka je uređivana zadnji put pon 21.12.2009 16:52 (Tracer).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: Class or struct

Što se tiče "value"  to je znači vrijednosni tip koji se "slaže na steak" dok se referentni tip odnosi na heap memoriju.....
u C# -u je
int a = 10; vrijednosni (value tip)...
klasa obj = new klasa();  //to je referentni tip

obj sadrži samo memorijsku lokaciju ....referentni tip je najbliži recimo pokazivačima u C++-u(u C# to niti ne pomisli tako,samo za usporedbu sam  to naveo) ,a value tip ,deklaraciji običnih tipova (int,double)..a tu spada i
struktura.....strukture je bolje koristiti za podatke jer je brži pristup a klase i instance klasa(referentne tipove) kad se koriste metode itd...

referentni tip varijable dakle sadrži kao neku vrijednost kad se deklarira samo adresu memorijske lokacije na kojoj je podatak koji će ta varijabla biti.

A strukture su u biti "skladišta"...ogrančenih mogućnosti ali ipak potrebnih.
Na forumu kad se koristi struct u primjerima obično se radi o manjim zadacima i ne toliko kompliciranim da bi se koristile klase ,naslijeđivanja itd...
Mislim da je zatoNeodlučan....

Private
Poruka je uređivana zadnji put pon 21.12.2009 18:49 (Private).
17 godina
protjeran
offline
Class or struct

Točno. U C#-u value tip je zapravo struct, dok refrence tip je class.

 

NekaKlasa X = new NekaKlasa(15); // value tip - automatski inicijaliziran

NekaKlasa X = new NekaKlasa(); // reference tip

 

 

Poruka je uređivana zadnji put pon 21.12.2009 22:46 (Tracer).
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Class or struct

Sad dok je usput da pitan i ovaj detalj odma

 

NekaKlasa X = new NekaKlasa(15); // value tip - automatski inicijaliziran

NekaKlasa X = new NekaKlasa(); // reference tip

 

Ovo prvi bi bio kao neki broj cija je vrijednost 15 a u drugom slucaju bi objekt poprimia adresu funkcije NekaKlasa jesan dobro svatia ????

Poruka je uređivana zadnji put pon 21.12.2009 22:33 (Jeronim).
 
0 0 hvala 0
17 godina
protjeran
offline
Class or struct

Krivo sam napisao :)

 

NekaStruktura X = new NekaStruktura(15); // value tip - alociran i inicijaliziran na 15

NekaKlasa X = new NekaKlasa(); // reference tip - alociran

 

Bitno je samo znati da value tip je struktura a reference klasa. Ono što sam htio kod referenci samo napomenuti je treba biti oprezan kada je riječ o operaciji pridruživanja.

 

NekaKlasa X = new NekaKlasa;

NekaKlasa Y = X;  // X i Y su reference na ISTI objekt!

 

Vrlo često ovdje i iskusni pomisle da Y zapravo predstavlja novu memorijsku lokaciju pa da se na nju prekopira sadržaj od X, ali zapravo ovdje je riječ kopiranju referenci, pa X i Y zapravo pokazuju na isti objekt!

 

Poruka je uređivana zadnji put pon 21.12.2009 22:45 (Tracer).
Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: Class or struct
Jeronim kaže...

(...)

 

NekaKlasa X = new NekaKlasa(15); // value tip - automatski inicijaliziran

NekaKlasa X = new NekaKlasa(); // reference tip

 

Ovo prvi bi bio kao neki broj cija je vrijednost 15 a u drugom slucaju bi objekt poprimia adresu funkcije NekaKlasa jesan dobro svatia ????

 

Ovdje su navedena dva načina instanciranja (stvaranja) objekta NekaKlasa. U prvom slučaju poziva se konstruktor sa parametrom, dok se u drugom slučaju poziva konstruktor bez parametara. Uloga konstruktora je inicijalizacija varijabli objekta na neke vrijednosti; konstruktori sa parametrima omogućavaju postavljanje određenih varijabli na neke vrijednosti već pri stvaranju objekta.

 

 

Razlika kod korištenja struktura i klasa će ti (možda) biti jasnija kroz ovaj jednostavni primjer.

 

Strukture:

Niz učenici sadrži strukture koje se sastoje od imena učenika i ocjene koju je dobio iz nekog predmeta. Želimo izdvojiti učenike prema ocjenama koje su dobili u zasebne nizove. Prilikom izdvajanja, u nove se nizove kopira sadržaj struktura, tako da za svakog učenika imamo dvije kopije podataka - jednu u izvornom nizu, a drugu u nizu koji odgovara ocjeni koju je dobio. Očito je da ovakav način rada ima nedostataka, npr. zauzeće memorije (višestruke kopije podataka) i sporiji rad, nekoherencija podataka (promijenimo li ocjene izvornom nizu, u nizovima sa ocjenama ostaju stare ocjene, o čemu treba voditi računa te i njih treba promijeniti).

 

Klase/objekti:

Niz učenici sadrži pokazivače na objekte (memorijske adrese na kojima se nalaze objekti klase) koji se sastoje od imena učenika i ocjene koju je dobio iz nekog predmeta. Prilikom izdvajanja, u nove se nizove kopiraju pokazivači na objekte. Nema kopiranja čitavih objekata nego samo pokazivača, te je izvođenje je puno brže, a budući da su pokazivači veličine 4/8 bajta (32/64 bita), dodatno zauzeće memorije je puno manje nego kada se koriste strukture. Dodatno, nekoherencije podataka u nizovima nema, budući da za svakog učenika u svakom nizu postoji samo jedan objekt.

 

 

Pripaziti treba kod pridruživanja (kao što je navedeno u prijašnjem postu) i usporedbe:

 

Strukture:

Y=X;    // u varijablu Y se kopira sadržaj strukture X (istog tipa)
        // Y i X su varijable tipa Struktura

Y==X je istinito ako su Y i X istog tipa (ista struktura)
     i ako varijable (članovi) strukture imaju jednak sadržaj.

 

Klase:

Y=X;        // u varijablu Y se kopira adresa memorijske
            // lokacije objekta X (iste klase)
            // Y i X su pokazivači na objekte tipa Klasa

Y==X je istinito ako su Y i X istog tipa (ista klasa)
     i ako pokazuju na isti objekt.

 

 

Dakle, moja je preporuka da koristiš klase - uz navedene prednosti pred strukturama, imaju i dodatne prednosti koje proizlaze iz OOP (poput npr. nasljeđivanja).

Strukture Strukture
Klase Klase
The laws of nature are constructed in such a way as to make the universe as interesting as possible. - Freeman Dyson, Imagined Worlds
Poruka je uređivana zadnji put uto 22.12.2009 11:27 (hrx).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice