SlideShare a Scribd company logo
Računarski praktikum 1
Predavanja
Goran Igaly
Sveučilište u Zagrebu
PMF, Matematički odsjek
6. predavanje
2
Heap - gomila
 Za potrebe rada s objektima na heap-u,
uvedena su dva nova operatora:
 new – operator za kreiranje objekata na heap-u
 delete – operator za brisanje objekata s heap-a
3
Primjer za
new i delete
class MojaKlasa
{
public:
int _MojPodatak;
};
int main(int argc, char* argv[])
{
MojaKlasa objStog; // objekt na stogu
objStog._MojPodatak = 10;
MojaKlasa *pStog = new MojaKlasa(); // objekt na heap-u
pStog->_MojPodatak = 10;
delete pStog; // moramo eksplicitno osloboditi memoriju
return 0;
// po završetku funkcije,
// objStog će se automatski ukloniti iz memorije
}
4
 new i delete nisu namijenjeni isključivo za
kreiranje i uništavanje objekata:
 Predstavljaju općenitu zamjenu za malloc i
realloc
 Type safe verzija – točno se zna za kakav tip
podatka se alocira memorija (verzija sigurna
s obzirom na tip podataka)
Još o operatorima new i delete
5
Primjer06 – new i delete
float *pFloat = new float;
int *pInt = new int[10];
char *pString = new char[20];
delete pFloat;
delete [] pInt;
delete [] pString;
Za brisanje polja mora se koristiti operator delete []
Kreiranje objekta
 Kreiranje objekta ipak ne znači samo
alokaciju memorije za smještanje objekta !
 Bitno je u kakvom stanju se objekt nalazi nakon
kreiranja, odnosno kakve su mu vrijednosti
članskih varijabli - problem inicijalizacije !
 Javlja se i u C-u:
 Nakon deklaracije int a; nije definirano kakvu
vrijednost ima varijabla a
 Kod objekata je stvar još složenija jer mogu
imati više članskih varijabli
 Kako inicijalizirati pokazivače koji su dio klase ?! 6
7
Inicijaliziranje objekta
 Za rješavanje ovog problema kod klase
DinamickoPolje namijenjena je funkcija
Inicijaliziraj() koja dovodi kreirani
objekt u ispravno stanje
 Što ako kreiramo objekt i zaboravimo pozvati
funkciju Inicijaliziraj() ?
 Dolazi do pogreške kod korištenja objekta
8
Konstruktori
9
Pojam konstruktora objekta/klase
 Specijalna funkcija članica namijenjena inicijalizaciji
stanja objekta kod njegovog kreiranja
 Prepoznaje se po imenu funkcije – mora biti isto
kao i ime klase
class MojaKlasa {
public:
MojaKlasa() { ... } //
konstruktor bez parametara
MojaKlasa(int a) { ... } //
konstruktor s jednim parametrom
};
10
 Primjer overloading-a (preopterećenja, preklapanja)
funkcije
 Imamo funkcije istog imena (u C-u to nije dozvoljeno) a
prevoditelj ih razlikuje po tipu parametara
 Konstruktor nema povratnog parametra – ne vraća i
ne može vratiti nikakav podatak nakon izvršavanja!
 Ako dođe do pogreške koju treba signalizirati ostatku
programa – treba koristiti iznimku (engl. exception)
Primjer korištenja konstruktora
void main() {
MojaKlasa a;
MojaKlasa b(10);
MojaKlasa *c = new MojaKlasa();
MojaKlasa *d = new MojaKlasa(10);
}
11
12
Kako su radili prethodni primjeri
(bez definiranog konstruktora) ?
 Prevoditelj za svaku klasu za koju nije
eksplicitno definiran konstruktor sam dodaje
podrazumijevani (engl. default) konstruktor
 Konstruktor bez parametara koji članske varijable
inicijalizira na neke podrazumijevane vrijednosti
 Bolje je imati vlastiti konstruktor, tj. ne
oslanjati se na pretpostavljene vrijednosti
13
Destruktori
Zadatak destruktora
http://www.dailymail.co.uk/news/articl
e-1239841/Youre-doing-wrong-
Chinese-demolition-men-
accidentally-create-leaning-tower-
Liuzhou.html
14
15
Destruktori
 Definiranjem konstruktora smo “pokrili” kreiranje objekta, a što je
s brisanjem (uništavanjem) ?
 Možemo definirati destruktor klase
 Funkcija članica koja će se pozivati prilikom uništavanja objekta
 “Uništavanje” objekta znači brisanje objekta iz memorije
 Tehničkim žargonom – objekt izlazi iz dosega (engl. scope)
 Trenutak kada se poziva destruktor:
 Za objekte kreirane na stogu – trenutak kada funkcija u kojoj su
deklarirani završava i briše sve svoje podatke sa stoga
 Za objekte kreirane na heap-u (gomili) – trenutak kad se nad
njima poziva delete
 Ukoliko je u klasi definiran destruktor, prevoditelj će ga
automatski pozvati u trenutku uništavanja objekta
16
PRIMJER06 - konstruktor i destruktor
class MojaKlasa {
public:
MojaKlasa() {...} // konstruktor 1
MojaKlasa(int a) {...} // konstruktor 2
~MojaKlasa() {...} // destruktor (jedini)
};
void main() {
MojaKlasa a;
MojaKlasa *b = new MojaKlasa();
... // tijelo funkcije
delete b; // eksplicitni poziv destruktora
}
// destruktor za a se poziva
// prije izlaska iz funkcije
17
 Uništavanje objekta je podrazumijevalo samo
oslobađanje memorije (alocirane za smještaj samog
objekta!) i to za to se pobrinuo prevoditelj
 Destruktor je “glumila” funkcija Izbrisi() koja je
oslobađala zauzetu memoriju
 A što da smo je zaboravili pozvati ?
 Imamo curenje (gubitak) memorije (memory leak) u
programu – zauzeli smo resurse računala ali ih nismo
oslobodili iako ih više ne koristimo !
 “zaboravnost” programera u takvim slučajevima može
voditi izrazito nezgodnim pogreškama
Kako su radili prethodni primjeri
(bez definiranog destruktora) ?

More Related Content

What's hot

Presentation aix basic
Presentation   aix basicPresentation   aix basic
Presentation aix basic
xKinAnx
 
Поняття та види договорів
Поняття та види договорівПоняття та види договорів
Поняття та види договорів
Kyiv National Economic University
 
Основи міжнародного права
Основи міжнародного праваОснови міжнародного права
Основи міжнародного права
Kyiv National Economic University
 
Види договорів в торгівлі загальні поняття та їх структура
Види договорів в торгівлі загальні поняття та їх структураВиди договорів в торгівлі загальні поняття та їх структура
Види договорів в торгівлі загальні поняття та їх структура
Artem352
 
юрисдикція, підсудність
юрисдикція, підсудністьюрисдикція, підсудність
юрисдикція, підсудністьMykhailov777
 
Análise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com VolatilityAnálise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com Volatility
ederluis1973
 
Паризька мирна конференція
Паризька мирна конференціяПаризька мирна конференція
Паризька мирна конференція
Arkusha
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
Звіт за результатами аналізу проблеми недоторканності народних депутатів України
Звіт за результатами аналізу проблеми недоторканності народних депутатів УкраїниЗвіт за результатами аналізу проблеми недоторканності народних депутатів України
Звіт за результатами аналізу проблеми недоторканності народних депутатів України
Centre of Policy and Legal Reform
 
리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍
Yunsu Lee
 
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
Adrian Huang
 
Презентація з дисципліни "Цивільне прав та процес"
Презентація з дисципліни "Цивільне прав та процес"Презентація з дисципліни "Цивільне прав та процес"
Презентація з дисципліни "Цивільне прав та процес"
Александр Кухарев
 
Вимоги щодо прозорості та доступу до інформації
Вимоги щодо прозорості та доступу до інформаціїВимоги щодо прозорості та доступу до інформації
Вимоги щодо прозорості та доступу до інформації
Centre of Policy and Legal Reform
 
Spectrum Scale Memory Usage
Spectrum Scale Memory UsageSpectrum Scale Memory Usage
Spectrum Scale Memory Usage
Tomer Perry
 
Vfs
VfsVfs
Ifographika
IfographikaIfographika
Ifographika
ssuserc3085b
 
Пам'ятка щодо дітей.pdf
Пам'ятка щодо дітей.pdfПам'ятка щодо дітей.pdf
Пам'ятка щодо дітей.pdf
Centre of Policy and Legal Reform
 
Конституційно-правовий статус президента України
Конституційно-правовий статус президента УкраїниКонституційно-правовий статус президента України
Конституційно-правовий статус президента України
Kyiv National Economic University
 
Improvement of Scheduling Granularity for Deadline Scheduler
Improvement of Scheduling Granularity for Deadline Scheduler Improvement of Scheduling Granularity for Deadline Scheduler
Improvement of Scheduling Granularity for Deadline Scheduler
Yoshitake Kobayashi
 

What's hot (20)

Presentation aix basic
Presentation   aix basicPresentation   aix basic
Presentation aix basic
 
Поняття та види договорів
Поняття та види договорівПоняття та види договорів
Поняття та види договорів
 
Основи міжнародного права
Основи міжнародного праваОснови міжнародного права
Основи міжнародного права
 
Види договорів в торгівлі загальні поняття та їх структура
Види договорів в торгівлі загальні поняття та їх структураВиди договорів в торгівлі загальні поняття та їх структура
Види договорів в торгівлі загальні поняття та їх структура
 
юрисдикція, підсудність
юрисдикція, підсудністьюрисдикція, підсудність
юрисдикція, підсудність
 
Análise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com VolatilityAnálise de Malware em Dump de Memória com Volatility
Análise de Malware em Dump de Memória com Volatility
 
Паризька мирна конференція
Паризька мирна конференціяПаризька мирна конференція
Паризька мирна конференція
 
Референдум: поняття та види
Референдум: поняття та видиРеферендум: поняття та види
Референдум: поняття та види
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Звіт за результатами аналізу проблеми недоторканності народних депутатів України
Звіт за результатами аналізу проблеми недоторканності народних депутатів УкраїниЗвіт за результатами аналізу проблеми недоторканності народних депутатів України
Звіт за результатами аналізу проблеми недоторканності народних депутатів України
 
리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍리눅스커널-디바이스드라이버_모듈_프로그래밍
리눅스커널-디바이스드라이버_모듈_프로그래밍
 
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
qemu + gdb + sample_code: Run sample code in QEMU OS and observe Linux Kernel...
 
Презентація з дисципліни "Цивільне прав та процес"
Презентація з дисципліни "Цивільне прав та процес"Презентація з дисципліни "Цивільне прав та процес"
Презентація з дисципліни "Цивільне прав та процес"
 
Вимоги щодо прозорості та доступу до інформації
Вимоги щодо прозорості та доступу до інформаціїВимоги щодо прозорості та доступу до інформації
Вимоги щодо прозорості та доступу до інформації
 
Spectrum Scale Memory Usage
Spectrum Scale Memory UsageSpectrum Scale Memory Usage
Spectrum Scale Memory Usage
 
Vfs
VfsVfs
Vfs
 
Ifographika
IfographikaIfographika
Ifographika
 
Пам'ятка щодо дітей.pdf
Пам'ятка щодо дітей.pdfПам'ятка щодо дітей.pdf
Пам'ятка щодо дітей.pdf
 
Конституційно-правовий статус президента України
Конституційно-правовий статус президента УкраїниКонституційно-правовий статус президента України
Конституційно-правовий статус президента України
 
Improvement of Scheduling Granularity for Deadline Scheduler
Improvement of Scheduling Granularity for Deadline Scheduler Improvement of Scheduling Granularity for Deadline Scheduler
Improvement of Scheduling Granularity for Deadline Scheduler
 

Viewers also liked

Računarski praktikum 1 - Konstruktor kopiranja
Računarski praktikum 1 - Konstruktor kopiranjaRačunarski praktikum 1 - Konstruktor kopiranja
Računarski praktikum 1 - Konstruktor kopiranja
Goran Igaly
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
KuliahKita
 
Class dan object
Class dan objectClass dan object
Class dan objectHardini_HD
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2biedoen
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)
biedoen
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6
biedoen
 
Linked List
Linked ListLinked List
Linked List
said zulhelmi
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo
JinTaek Seo
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan Destruktor
KuliahKita
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circularHitesh Wagle
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
Tenia Wahyuningrum
 
Gerbang Logika Dasar
Gerbang Logika DasarGerbang Logika Dasar
Gerbang Logika Dasar
Arif Hakim
 
Stack
StackStack
Stack tumpukan
Stack tumpukan Stack tumpukan
Stack tumpukan
biedoen
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_listWandi Parlente
 
Tugas kelompok 2
Tugas kelompok 2Tugas kelompok 2
Tugas kelompok 2
yusriren
 
2894065
28940652894065
2894065
Sera Dewi
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listSunarya Marwah
 
Teori antrian
Teori antrianTeori antrian
Teori antrian
Dian Istiqoma
 

Viewers also liked (20)

Računarski praktikum 1 - Konstruktor kopiranja
Računarski praktikum 1 - Konstruktor kopiranjaRačunarski praktikum 1 - Konstruktor kopiranja
Računarski praktikum 1 - Konstruktor kopiranja
 
Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi Berkas
 
Class dan object
Class dan objectClass dan object
Class dan object
 
Struktur data pertemuan 1 & 2
Struktur data   pertemuan 1 & 2Struktur data   pertemuan 1 & 2
Struktur data pertemuan 1 & 2
 
Sd pertemuan 3 & 4 (edited)
Sd   pertemuan 3 & 4 (edited)Sd   pertemuan 3 & 4 (edited)
Sd pertemuan 3 & 4 (edited)
 
Sd pertemuan 5 & 6
Sd   pertemuan 5 & 6Sd   pertemuan 5 & 6
Sd pertemuan 5 & 6
 
Linked List
Linked ListLinked List
Linked List
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo
 
Algoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan DestruktorAlgoritma dan Struktur Data - Konstruktor dan Destruktor
Algoritma dan Struktur Data - Konstruktor dan Destruktor
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circular
 
Stack atau tumpukan
Stack atau tumpukanStack atau tumpukan
Stack atau tumpukan
 
Gerbang Logika Dasar
Gerbang Logika DasarGerbang Logika Dasar
Gerbang Logika Dasar
 
Stack
StackStack
Stack
 
Classes and objects
Classes and objectsClasses and objects
Classes and objects
 
Stack tumpukan
Stack tumpukan Stack tumpukan
Stack tumpukan
 
5 6 single-linked_list
5 6 single-linked_list5 6 single-linked_list
5 6 single-linked_list
 
Tugas kelompok 2
Tugas kelompok 2Tugas kelompok 2
Tugas kelompok 2
 
2894065
28940652894065
2894065
 
Struktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked listStruktur data 01 (pointer dan linked list
Struktur data 01 (pointer dan linked list
 
Teori antrian
Teori antrianTeori antrian
Teori antrian
 

Similar to Predavanja 06 Konstruktori i destruktori

Predavanja 04
Predavanja 04Predavanja 04
Predavanja 04
Goran Igaly
 
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članiceRP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
Goran Igaly
 
Predavanja 05 - Osnovne osobine klasa
Predavanja 05 - Osnovne osobine klasaPredavanja 05 - Osnovne osobine klasa
Predavanja 05 - Osnovne osobine klasa
Goran Igaly
 
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
Goran Igaly
 
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranjaRp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Goran Igaly
 
Csharp08
Csharp08Csharp08
Csharp08
admira_versace
 

Similar to Predavanja 06 Konstruktori i destruktori (7)

Predavanja 04
Predavanja 04Predavanja 04
Predavanja 04
 
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članiceRP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
RP1 - Funkcije za rad s dinamičkim poljem. Funkcije članice
 
Predavanja 05 - Osnovne osobine klasa
Predavanja 05 - Osnovne osobine klasaPredavanja 05 - Osnovne osobine klasa
Predavanja 05 - Osnovne osobine klasa
 
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
Računarski praktikum 1 - Objektno orijentirani dizajn (9. predavanje)
 
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranjaRp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
Rp1 predavanja 02 - Koncepti objektno orijentiranog programiranja
 
C# predavanja
C# predavanjaC# predavanja
C# predavanja
 
Csharp08
Csharp08Csharp08
Csharp08
 

More from Goran Igaly

Predavanja3. word 1
Predavanja3.   word 1Predavanja3.   word 1
Predavanja3. word 1
Goran Igaly
 
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projektiMogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Goran Igaly
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkovi
Goran Igaly
 
Nova prezentacija
Nova prezentacijaNova prezentacija
Nova prezentacija
Goran Igaly
 
LaTeX - prvo predavanje
LaTeX - prvo predavanjeLaTeX - prvo predavanje
LaTeX - prvo predavanje
Goran Igaly
 
Predavanja 11
Predavanja 11Predavanja 11
Predavanja 11
Goran Igaly
 
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-aPredavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Goran Igaly
 
Računarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajnRačunarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajn
Goran Igaly
 
Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016
Goran Igaly
 
Rp1 predavanja 01
Rp1 predavanja 01Rp1 predavanja 01
Rp1 predavanja 01
Goran Igaly
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dio
Goran Igaly
 
Proračunske tablice - 3. dio
Proračunske tablice - 3. dioProračunske tablice - 3. dio
Proračunske tablice - 3. dio
Goran Igaly
 
Predavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioPredavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dio
Goran Igaly
 
Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1
Goran Igaly
 
Obrada teksta - 2. dio
Obrada teksta - 2. dioObrada teksta - 2. dio
Obrada teksta - 2. dio
Goran Igaly
 
Osnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeOsnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologije
Goran Igaly
 
Zadaća 2 1
Zadaća 2 1Zadaća 2 1
Zadaća 2 1
Goran Igaly
 
Hrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeHrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeGoran Igaly
 
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanjeHrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
Goran Igaly
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenju
Goran Igaly
 

More from Goran Igaly (20)

Predavanja3. word 1
Predavanja3.   word 1Predavanja3.   word 1
Predavanja3. word 1
 
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projektiMogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
Mogućnosti korištenja mikrokontrolera u obrazovanju i raniji slični projekti
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkovi
 
Nova prezentacija
Nova prezentacijaNova prezentacija
Nova prezentacija
 
LaTeX - prvo predavanje
LaTeX - prvo predavanjeLaTeX - prvo predavanje
LaTeX - prvo predavanje
 
Predavanja 11
Predavanja 11Predavanja 11
Predavanja 11
 
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-aPredavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
Predavanje 10 - Računarski praktikum 1 - Analiza i dizajn korištenjem UML-a
 
Računarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajnRačunarski praktikum 1 - Razvoj softvera i dizajn
Računarski praktikum 1 - Razvoj softvera i dizajn
 
Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016
 
Rp1 predavanja 01
Rp1 predavanja 01Rp1 predavanja 01
Rp1 predavanja 01
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dio
 
Proračunske tablice - 3. dio
Proračunske tablice - 3. dioProračunske tablice - 3. dio
Proračunske tablice - 3. dio
 
Predavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioPredavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dio
 
Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1
 
Obrada teksta - 2. dio
Obrada teksta - 2. dioObrada teksta - 2. dio
Obrada teksta - 2. dio
 
Osnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeOsnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologije
 
Zadaća 2 1
Zadaća 2 1Zadaća 2 1
Zadaća 2 1
 
Hrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematikeHrvatsko nazivlje u nastavi matematike
Hrvatsko nazivlje u nastavi matematike
 
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanjeHrvatsko nazivlje u matematici   temeljni pojmovi - završno predavanje
Hrvatsko nazivlje u matematici temeljni pojmovi - završno predavanje
 
Matematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenjuMatematički postupci u automatskom prevođenju
Matematički postupci u automatskom prevođenju
 

Predavanja 06 Konstruktori i destruktori

  • 1. Računarski praktikum 1 Predavanja Goran Igaly Sveučilište u Zagrebu PMF, Matematički odsjek 6. predavanje
  • 2. 2 Heap - gomila  Za potrebe rada s objektima na heap-u, uvedena su dva nova operatora:  new – operator za kreiranje objekata na heap-u  delete – operator za brisanje objekata s heap-a
  • 3. 3 Primjer za new i delete class MojaKlasa { public: int _MojPodatak; }; int main(int argc, char* argv[]) { MojaKlasa objStog; // objekt na stogu objStog._MojPodatak = 10; MojaKlasa *pStog = new MojaKlasa(); // objekt na heap-u pStog->_MojPodatak = 10; delete pStog; // moramo eksplicitno osloboditi memoriju return 0; // po završetku funkcije, // objStog će se automatski ukloniti iz memorije }
  • 4. 4  new i delete nisu namijenjeni isključivo za kreiranje i uništavanje objekata:  Predstavljaju općenitu zamjenu za malloc i realloc  Type safe verzija – točno se zna za kakav tip podatka se alocira memorija (verzija sigurna s obzirom na tip podataka) Još o operatorima new i delete
  • 5. 5 Primjer06 – new i delete float *pFloat = new float; int *pInt = new int[10]; char *pString = new char[20]; delete pFloat; delete [] pInt; delete [] pString; Za brisanje polja mora se koristiti operator delete []
  • 6. Kreiranje objekta  Kreiranje objekta ipak ne znači samo alokaciju memorije za smještanje objekta !  Bitno je u kakvom stanju se objekt nalazi nakon kreiranja, odnosno kakve su mu vrijednosti članskih varijabli - problem inicijalizacije !  Javlja se i u C-u:  Nakon deklaracije int a; nije definirano kakvu vrijednost ima varijabla a  Kod objekata je stvar još složenija jer mogu imati više članskih varijabli  Kako inicijalizirati pokazivače koji su dio klase ?! 6
  • 7. 7 Inicijaliziranje objekta  Za rješavanje ovog problema kod klase DinamickoPolje namijenjena je funkcija Inicijaliziraj() koja dovodi kreirani objekt u ispravno stanje  Što ako kreiramo objekt i zaboravimo pozvati funkciju Inicijaliziraj() ?  Dolazi do pogreške kod korištenja objekta
  • 9. 9 Pojam konstruktora objekta/klase  Specijalna funkcija članica namijenjena inicijalizaciji stanja objekta kod njegovog kreiranja  Prepoznaje se po imenu funkcije – mora biti isto kao i ime klase class MojaKlasa { public: MojaKlasa() { ... } // konstruktor bez parametara MojaKlasa(int a) { ... } // konstruktor s jednim parametrom };
  • 10. 10  Primjer overloading-a (preopterećenja, preklapanja) funkcije  Imamo funkcije istog imena (u C-u to nije dozvoljeno) a prevoditelj ih razlikuje po tipu parametara  Konstruktor nema povratnog parametra – ne vraća i ne može vratiti nikakav podatak nakon izvršavanja!  Ako dođe do pogreške koju treba signalizirati ostatku programa – treba koristiti iznimku (engl. exception)
  • 11. Primjer korištenja konstruktora void main() { MojaKlasa a; MojaKlasa b(10); MojaKlasa *c = new MojaKlasa(); MojaKlasa *d = new MojaKlasa(10); } 11
  • 12. 12 Kako su radili prethodni primjeri (bez definiranog konstruktora) ?  Prevoditelj za svaku klasu za koju nije eksplicitno definiran konstruktor sam dodaje podrazumijevani (engl. default) konstruktor  Konstruktor bez parametara koji članske varijable inicijalizira na neke podrazumijevane vrijednosti  Bolje je imati vlastiti konstruktor, tj. ne oslanjati se na pretpostavljene vrijednosti
  • 15. 15 Destruktori  Definiranjem konstruktora smo “pokrili” kreiranje objekta, a što je s brisanjem (uništavanjem) ?  Možemo definirati destruktor klase  Funkcija članica koja će se pozivati prilikom uništavanja objekta  “Uništavanje” objekta znači brisanje objekta iz memorije  Tehničkim žargonom – objekt izlazi iz dosega (engl. scope)  Trenutak kada se poziva destruktor:  Za objekte kreirane na stogu – trenutak kada funkcija u kojoj su deklarirani završava i briše sve svoje podatke sa stoga  Za objekte kreirane na heap-u (gomili) – trenutak kad se nad njima poziva delete  Ukoliko je u klasi definiran destruktor, prevoditelj će ga automatski pozvati u trenutku uništavanja objekta
  • 16. 16 PRIMJER06 - konstruktor i destruktor class MojaKlasa { public: MojaKlasa() {...} // konstruktor 1 MojaKlasa(int a) {...} // konstruktor 2 ~MojaKlasa() {...} // destruktor (jedini) }; void main() { MojaKlasa a; MojaKlasa *b = new MojaKlasa(); ... // tijelo funkcije delete b; // eksplicitni poziv destruktora } // destruktor za a se poziva // prije izlaska iz funkcije
  • 17. 17  Uništavanje objekta je podrazumijevalo samo oslobađanje memorije (alocirane za smještaj samog objekta!) i to za to se pobrinuo prevoditelj  Destruktor je “glumila” funkcija Izbrisi() koja je oslobađala zauzetu memoriju  A što da smo je zaboravili pozvati ?  Imamo curenje (gubitak) memorije (memory leak) u programu – zauzeli smo resurse računala ali ih nismo oslobodili iako ih više ne koristimo !  “zaboravnost” programera u takvim slučajevima može voditi izrazito nezgodnim pogreškama Kako su radili prethodni primjeri (bez definiranog destruktora) ?