Strukture i klase

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: Algoritmi i programiranje 2. razred
Knjiga: Strukture i klase
Otisnuo/la: Gost (anonimni korisnik)
Datum: subota, 21. ožujka 2026., 17:15

Opis

Strukture su složeni tip podataka.

Uporaba polja omogućavala nam je pohranu više podataka pod jednim imenom kako bismo smanjili broj varijabli u programu.  U polju su svi podaci  biti istog tipa.

Stukture nam omogućavaju grupiranje podataka različitih tipova.

Za deklaraciju strukture koristimo ključnu riječ struct. Unutar stukture može se nalaziti proizvoljan broj članova različitih tipova.



1. Strukture

Strukture su složeni tip podataka.

Uporaba polja omogućavala nam je grupiranje pohranu više podataka pod jednim imenom kako bismo smanjili broj varijabli u programu.  U polju su svi podaci bili istog tipa.

Strukture nam omogućavaju grupiranje podataka različitih tipova.

Za deklaraciju strukture koristimo ključnu riječ struct

Ime strukture uvijek započinje velikim slovom kako bismo ju razlikovali od varijable.  Unutar stukture može se nalaziti proizvoljan broj članskih varijabli različitih tipova. Vidljivost članskih varijabli defaultno je public,   mogu biti još i private i protected


Struktura može biti globalna ili lokalna ovisno gdje je deklarirana.

Prilikom deklaracije strukture, iako kompajleru govorimo da ona postoji ne dolazi do alokacije memorije, nego tek kada deklariramo varijablu iz strukture. 

Osnovna prednost uporabe struktura u odnosu na pojedinačne varijable je to što možemo proslijediti cijelu strukturu u funkciju

Ukoliko odlučimo dodati nove članske varijable u strukturu ne moramo mijenjati deklaraciju funkcije. Funkcija može vratiti strukturu što je jedan od načina vraćanja više varijabli.

Struktura može sadržavati druge strukture

Obično je veličina memorije koju zauzima struktura suma veličina koju u memoriji zauzimaju pojedine članske varijable sturkture, no može biti i veća! Uzrok tome je što kompajler ponekad umeće praznine u strukture (padding).

Strukture je moguće dijeliti u više datoteka, dodavanjem strukture u u zaglavlje.

Struktura ne može sadržavati funkcije (metode), funkcije možemo koristiti sa strukturama ali ne unutar njih.

2. Primjer uporabe strukture

Primjer:


1. deklariramo strukturu Zaposlenik s 5 članskih varijabli

2. inicijaliziramo vrijednosti  članskih varijabli za dvije varijable tipa strukture Zaposlenik 

3. prosljeđujemo (by value - kopiju vrijednosti) cijelu strukturu za pojedinu varijablu strukture funkciji ispisInformacija()




3. Polja struktura

Deklaracija polja struktura razlikuje se od deklaracije strukture:



Polje tipa strukture možemo inicijalizirati u kodu na slijedeći način:


Elemente polja zatim možemo pretraživati po različitim ključevima, ispisivati ih, računati i sl. ovisno o vrsti podataka u polju.

4. Klase i objekti

Kod objektno orijentiranog programiranja (OOP) težište je projektiranju aplikacije kao skupa objekata koji izmjenjuju poruke.

OOP se temelji na klasama.

Klase su korisnički definirani tipovi podataka koji grupiraju povezane informacije.  

Klase sadrže članske varijable koje mogu biti različitih tipova, te mogu sadržavati metode (funkcije klase) što strukture nisu mogle. 

Defaultna vidljivost im je private, a mogu biti i public i protected, nazivamo ih i modifikatorima vidljivosti. 

Instance klase su varijable tipa klase, odnosno zovemo ih još i objektima

Objekt (engl. object) je naziv za skup svojstava koja možemo objediniti u smislenu cjelinu.

Pravila koja propisuju od čega je pojedini objekt sagrađen te kakva su njegova svojstva nazivaju se klasama.

Klasa je samo opis, dok je objekt stvarna, konkretna realizacija napravljena na temelju klase.


Kada je klasa jednom definirana, može se pomoću nje konstruirati neograničen broj objekata koji se zatim mogu koristiti.

U programu je objekt opisan varijablama koje mu određuju stanje i funkcijama koje mu određuju ponašanje.

Funkcije mijenjaju stanje objekta, a po potrebi mogu stvarati i nove objekte.

Za pristup članovima preko objekata i referenci koristi se operator . (točka), a u slučaju pristupa preko pokazivača operator -> (minus i veće od).



Funkcije objekta mogu pristupati svim članskim varijablama i funkcijama. Klijenti mogu vidjeti samo javne članske varijable i funkcije.





5. Ponovimo

Klase omogućavaju enkapsulaciju - povezivanje podataka i funkcija u jednu cjelinu koja se zove objekt.
Na taj način sva svojstva objekta možemo objediniti na istom mjestu čime olakšavamo manipulaciju podacima.









6. Konstruktori i destruktori

Do sada nismo inicijalizirali podatkovne članove - varijable (dodjeljivali im vrijednost) unutar same klase, nego smo ih samo deklarirali

Kada inicijaliziramo vrijednosti prilikom definiranja objekta takav se funkcijski član zove konstruktor. On ima isto ime kao i klasa, može primati parametre po potrebi i nema povratnu vrijednost.
Klasa/objekt može imati više konstruktora.
Prilikom stvaranja objekta poziva se samo jedan konstruktor.
Konstruktor može biti s parametrima ili bez njih.
Konstruktor  - stvaranje objekata

Destruktor - uništavanje objekata
Varijable ugrađenih tipova podataka možemo definirati i nakon toga im dodijeliti neku vrijednost:




Primjer konstruktora s parametrima i bez njih:

Konstruktori, kao i ostali članovi klase, podliježu pravima pristupa.

Treba paziti koje im se pravo dodjeljuje

Kao što se objekt može stvoriti, tako se mora moći i uništiti

Namjena je destruktora oslobađanje resursa za koje nema smisla da budu zauzeti nakon što je objekt postao nepotreban
Sintaksa za destruktor vrlo je jednostavna:

~ ime klase jaje {}

Destruktor je metoda koja se automatski poziva prilikom uništavanja objekta

Ima jednako ime kao i klasa uz prefiks ~ (tilda)

Klasa/objekt može imati samo jedan destruktor

Ne može imati ni povratne vrijednosti niti parametre

7. Primjeri konstruktora i destruktora

1. primjer: Napišite C++ program s deklaracijom klase bezParametara. Klasa treba imati jednu člansku varijablu (duljinu stranice pravilnog šesterokuta) čiju vrijednost treba inicijalizirati putem konstruktora klase, te dvije funkcije bez parametara od kojih jedna računa opseg, a druga površinu pravilnog šesterokta. U mainu treba:

–deklarirati objekt klase bezParametara
–ispisati opseg i površinu s preciznošću od dvije decimale pozivanjem pripadajućih metoda




2. primjer: Na prethodni primjer treba dodati konstruktor s jednim parametrom (duljina) za koji će korisnik u mainu unijeti vrijednost. U mainu treba:

–deklarirati novi objekt klase bezParametara s jednim parametrom (duljina)
–ispisati opseg i površinu s preciznošću od dvije decimale pozivanjem pripadajućih metoda




8. Primjeri konstruktora i destruktora

3. primjer: Napišite C++ program s deklaracijom klase sesterostranaPrizma.

Klasa treba imati dvije članske varijable (duljinu stranice pravilnog šesterokuta i visinu). 

Jednom te vrijednosti treba inicijalizirati putem konstruktora klase koji ne prima parametre, 

a drugi puta putem konstruktora klase koji prima ta dva parametra iz maina, 

te dvije funkcije bez parametara od kojih jedna računa oplošje, a druga volumen te prizme. U mainu treba:

–deklarirati objekt klase bez parametara
–deklarirati objekt klase sa parametrima
–ispisati oplošje i volumen za oba objekta s preciznošću od dvije decimale pozivanjem pripadajućih metoda