Sunteți pe pagina 1din 5

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.

trajni link
00HVALA0
hrx
4 godine

OFFLINE
pon 21.12.2009 15:51
OdgovoriCitiraj
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).

trajni link
00HVALA0
Jeronim
3 godine

neaktivan
OFFLINE
pon 21.12.2009 16:09
OdgovoriCitiraj
Class or struct
c++

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

trajni link
00HVALA0
Tracer
4 godine

protjeran
OFFLINE
pon 21.12.2009 16:52
OdgovoriCitiraj
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
trajni link
00HVALA0
Private
4 godine

OFFLINE
pon 21.12.2009 18:35
OdgovoriCitiraj
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 zato ....
Private
Poruka je uređivana zadnji put pon 21.12.2009 18:49 (Private).

trajni link nadporuka


10HVALA0
Tracer
4 godine

protjeran
OFFLINE
pon 21.12.2009 22:11
OdgovoriCitiraj
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
trajni link
00HVALA0
Jeronim
3 godine

neaktivan
OFFLINE
pon 21.12.2009 22:30
OdgovoriCitiraj
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).

trajni link
00HVALA0
Tracer
4 godine

protjeran
OFFLINE
pon 21.12.2009 22:44
OdgovoriCitiraj
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
trajni link
00HVALA0
hrx
4 godine

OFFLINE
uto 22.12.2009 11:17
OdgovoriCitiraj
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 1 SLIKA

KLASE 2 SLIKA

S-ar putea să vă placă și