SlideShare a Scribd company logo
1 of 17
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 (6)

Csharp08
Csharp08Csharp08
Csharp08
 
C++ radna skripta
C++ radna skriptaC++ radna skripta
C++ radna skripta
 
C# predavanja
C# predavanjaC# predavanja
C# predavanja
 
M files
M filesM files
M files
 
C++ funkcije
C++ funkcijeC++ funkcije
C++ funkcije
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 

Viewers also liked

Pemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasPemrograman C++ - Operasi Berkas
Pemrograman C++ - Operasi BerkasKuliahKita
 
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 & 6biedoen
 
02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseo02 linked list_20160217_jintaekseo
02 linked list_20160217_jintaekseoJinTaek 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 DestruktorKuliahKita
 
9.double linked list circular
9.double linked list circular9.double linked list circular
9.double linked list circularHitesh Wagle
 
Gerbang Logika Dasar
Gerbang Logika DasarGerbang Logika Dasar
Gerbang Logika DasarArif Hakim
 
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 2yusriren
 
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
 

Viewers also liked (20)

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
 
Queue
QueueQueue
Queue
 

More from Goran Igaly

Predavanja3. word 1
Predavanja3.   word 1Predavanja3.   word 1
Predavanja3. word 1Goran 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 projektiGoran Igaly
 
Nacionalni parkovi
Nacionalni parkoviNacionalni parkovi
Nacionalni parkoviGoran Igaly
 
Nova prezentacija
Nova prezentacijaNova prezentacija
Nova prezentacijaGoran Igaly
 
LaTeX - prvo predavanje
LaTeX - prvo predavanjeLaTeX - prvo predavanje
LaTeX - prvo predavanjeGoran 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-aGoran 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 dizajnGoran Igaly
 
Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Powerpoint za nastavnike 2016
Powerpoint za nastavnike 2016Goran Igaly
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dioGoran Igaly
 
Proračunske tablice - 3. dio
Proračunske tablice - 3. dioProračunske tablice - 3. dio
Proračunske tablice - 3. dioGoran Igaly
 
Predavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioPredavanje9 - Excel 2. dio
Predavanje9 - Excel 2. dioGoran Igaly
 
Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Računarski praktikum 1 - Excel 1
Računarski praktikum 1 - Excel 1Goran Igaly
 
Obrada teksta - 2. dio
Obrada teksta - 2. dioObrada teksta - 2. dio
Obrada teksta - 2. dioGoran Igaly
 
Osnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeOsnovni koncepti informatičke tehnologije
Osnovni koncepti informatičke tehnologijeGoran 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 predavanjeGoran 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đenjuGoran 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đenjuGoran 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
 
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
 
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) ?