SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Računarski praktikum 1
Predavanja
Goran Igaly
Sveučilište u Zagrebu
PMF, Matematički odsjek
7. predavanje
(konstruktor kopiranja)
2
Prednost destruktora
 Prevoditelj se brine da se pozove funkcija za
uništavanje objekta (destruktor)
 Vrijedi samo za objekte kreirane na stogu
 Kod objekata kreiranih na heap-u (pomoću
new) mora se pozvati delete !
 Kreator objekta određuje kada će se on uništiti
3
Konstruktor kopiranja (copy-constructor) i
poziv po vrijednosti (call by value)
 Što je sa kopiranjem objekata ?
 Npr. poziv funkcije u koju se po po vrijednosti (call by value) prenosi objekt !
 Za obične tipove (int, float, char) je to jednostavno – u funkciji se kreira lokalna
varijabla istog tipa i (automatski) inicijalizira s prenesenom vrijednošću
 A što ukoliko se prenosi objekt ?
void NekaFunkcija(MojaKlasa obj) {
...
}
void main() {
MojaKlasa a;
NekaFunkcija(a);
}
 Što znači prenijeti objekt „po vrijednosti” ?
4
 P: Pomoću kojeg konstruktora se kreira lokalni
objekt obj prilikom poziva funkcije
NekaFunkcija() ?
 O: Poziva se tzv. konstruktor kopiranja
(copy-constructor)
 P: Gdje je konstruktor kopiranja u našoj klasi?
 O: Nema ga eksplicitno, ali je prevoditelj sam
definirao “standardnu” (default) verziju ovog
konstruktora
Osnovno pitanje kod kreiranja
lokalnog objekta:
5
Primjer konstruktora kopiranja
 Sintaksa:
class MojaKlasa {
public:
MojaKlasa() { ... } // konstruktor 1
MojaKlasa(int a) { ... } // konstruktor 2
MojaKlasa(const MojaKlasa &initObj) { ... } //
// konstruktor kopiranja
~MojaKlasa() {} // destruktor
};
 Konstruktor kopiranja se prepoznaje po svom parametru – prima
referencu na objekt istog tipa koji će poslužiti kao osnova za
kreiranje novog objekta
 Referenca ? = skriveni pokazivač
6
 Podrazumijevana implementacija copy-
konstructora radi samo kopiranje vrijednosti
varijabli članica iz predanog (postojećeg)
objekta u instancu novostvorenog objekta
 Ovo je ispravan pristup za jednostavne
objekte
 Jednostavni objekti: Objekti koji u sebi nemaju
pokazivače na alocirane resurse (memorija,
datoteke, konekcije na bazu, ...)
7
 Neispravan za našu klasu DinamickoPolje
 Objekt kreiran pomoću podrazumijevanog copy-
konstruktora će pokazivati na isti dio memorije
koji je alociran za polje u originalnom objektu
 Je li to to ono što želimo kad
DinamickoPolje predajemo u funkciju ?
 NE ! – od početka se radi o call by value! Ukoliko
bismo željeli da funkcija radi sa istom instancom
objekta, u funkciju bismo prenijeli pokazivač na objekt
8
 Deep copy (dubinsko kopiranje) – konstruktor
kopiranja se implementira tako da kreira u
potpunosti novu kopiju objekta
 Za klasu DinamickoPolje to znači alociranje nove
memorije i inicijalizaciju elemenata u tom polju s
vrijednostima iz objekta predanog konstruktoru
kopiranja
Dva načina kopiranja objekata –
dubinsko (deep) i površinsko (shallow)
9
Dva načina kopiranja objekata –
dubinsko (deep) i površinsko (shallow)
 Shallow copy (površinsko kopiranje) – kreira
se novi objekt, ali on nastavlja “dijeliti”
određeni dio stanja s objektom na osnovu
kojega je nastao
 Za DinamickoPolje to znači da nakon kreiranja
objekta pomoću konstruktora kopiranja (copy-
constructor) imamo dva objekta koji pokazuju na
istu alociranu memoriju (polje) !
 Primjer: P07_DinamickoPolje_Cpp4_copy_constructor TEST
10
Problem kod objekata s pokazivačima
na istu alociranu memoriju
 Doći će do problema kad se pozovu destruktori za
ta dva objekta
 Prvi poziv destruktora će biti OK, ali kad se pozove
destruktor za drugi objekt, pokušaj oslobađanja već
oslobođene memorije će generirati pogrešku !
11
Reference
 Referenca = pokazivač s malo drukčijom
sintaksom
 Nema adresnog operatora i operatora
indirekcije (dereferenciranja) !
 Prevoditelj to obavlja automatski
 Deklaracija reference se prepoznaje po
prefiksu &
12
Primjer reference
void main() {
int a = 5;
int *pa = &a; // pokazivač pa pokazuje na varijablu a
int &ra = a; // referenca ra također referencira
varijablu a
int& ra2; // POGREŠKA – nedostaje inicijalizacija
extern int& ra3; //OK – inicijalizacije se obavlja na nekom
drugom mjestu
*pa = 10; // varijabla a sada je jednaka 10
ra = 15; // a je sada jednako 15
}
13
Primjeri za vježbu:
 Klasa Trokut:
 Izgraditi klasu Trokut koja će predstavljati koncept
trokuta kao geometrijskog lika koji ima definiranu
duljinu svake od tri stranice i ugrađenu
funkcionalnost za izračunavanje površine i
opsega trokuta
 Koje biste varijable članice definirali za ovu klasu?
 Koje bi se funkcije članice mogle definirati za ovu
klasu?
14
Primjeri za vježbu (2)
 Klasa KompleksniBroj
 Izgraditi klasu KompleksniBroj koja će
predstavljati (matematički) koncept kompleksnog
broja. Klasa mora sadržavati dvije varijable
članice koje će predstavljati realni i imaginarni dio
i pružati funkcionalnost za obavljanje
matematičkih operacija s kompleksnim brojevima
(zbrajanje, oduzimanje, množenje, dijeljenje,
konjugiranje, apsolutna vrijednost, trigonometrijski
oblik, korjenovanje, potenciranje)
 Koji je problem kod korjenovanja?

Weitere ähnliche Inhalte

Mehr von 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 - 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
 
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
 

Mehr von 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 - 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)
 
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
 

Računarski praktikum 1 - Konstruktor kopiranja

  • 1. Računarski praktikum 1 Predavanja Goran Igaly Sveučilište u Zagrebu PMF, Matematički odsjek 7. predavanje (konstruktor kopiranja)
  • 2. 2 Prednost destruktora  Prevoditelj se brine da se pozove funkcija za uništavanje objekta (destruktor)  Vrijedi samo za objekte kreirane na stogu  Kod objekata kreiranih na heap-u (pomoću new) mora se pozvati delete !  Kreator objekta određuje kada će se on uništiti
  • 3. 3 Konstruktor kopiranja (copy-constructor) i poziv po vrijednosti (call by value)  Što je sa kopiranjem objekata ?  Npr. poziv funkcije u koju se po po vrijednosti (call by value) prenosi objekt !  Za obične tipove (int, float, char) je to jednostavno – u funkciji se kreira lokalna varijabla istog tipa i (automatski) inicijalizira s prenesenom vrijednošću  A što ukoliko se prenosi objekt ? void NekaFunkcija(MojaKlasa obj) { ... } void main() { MojaKlasa a; NekaFunkcija(a); }  Što znači prenijeti objekt „po vrijednosti” ?
  • 4. 4  P: Pomoću kojeg konstruktora se kreira lokalni objekt obj prilikom poziva funkcije NekaFunkcija() ?  O: Poziva se tzv. konstruktor kopiranja (copy-constructor)  P: Gdje je konstruktor kopiranja u našoj klasi?  O: Nema ga eksplicitno, ali je prevoditelj sam definirao “standardnu” (default) verziju ovog konstruktora Osnovno pitanje kod kreiranja lokalnog objekta:
  • 5. 5 Primjer konstruktora kopiranja  Sintaksa: class MojaKlasa { public: MojaKlasa() { ... } // konstruktor 1 MojaKlasa(int a) { ... } // konstruktor 2 MojaKlasa(const MojaKlasa &initObj) { ... } // // konstruktor kopiranja ~MojaKlasa() {} // destruktor };  Konstruktor kopiranja se prepoznaje po svom parametru – prima referencu na objekt istog tipa koji će poslužiti kao osnova za kreiranje novog objekta  Referenca ? = skriveni pokazivač
  • 6. 6  Podrazumijevana implementacija copy- konstructora radi samo kopiranje vrijednosti varijabli članica iz predanog (postojećeg) objekta u instancu novostvorenog objekta  Ovo je ispravan pristup za jednostavne objekte  Jednostavni objekti: Objekti koji u sebi nemaju pokazivače na alocirane resurse (memorija, datoteke, konekcije na bazu, ...)
  • 7. 7  Neispravan za našu klasu DinamickoPolje  Objekt kreiran pomoću podrazumijevanog copy- konstruktora će pokazivati na isti dio memorije koji je alociran za polje u originalnom objektu  Je li to to ono što želimo kad DinamickoPolje predajemo u funkciju ?  NE ! – od početka se radi o call by value! Ukoliko bismo željeli da funkcija radi sa istom instancom objekta, u funkciju bismo prenijeli pokazivač na objekt
  • 8. 8  Deep copy (dubinsko kopiranje) – konstruktor kopiranja se implementira tako da kreira u potpunosti novu kopiju objekta  Za klasu DinamickoPolje to znači alociranje nove memorije i inicijalizaciju elemenata u tom polju s vrijednostima iz objekta predanog konstruktoru kopiranja Dva načina kopiranja objekata – dubinsko (deep) i površinsko (shallow)
  • 9. 9 Dva načina kopiranja objekata – dubinsko (deep) i površinsko (shallow)  Shallow copy (površinsko kopiranje) – kreira se novi objekt, ali on nastavlja “dijeliti” određeni dio stanja s objektom na osnovu kojega je nastao  Za DinamickoPolje to znači da nakon kreiranja objekta pomoću konstruktora kopiranja (copy- constructor) imamo dva objekta koji pokazuju na istu alociranu memoriju (polje) !  Primjer: P07_DinamickoPolje_Cpp4_copy_constructor TEST
  • 10. 10 Problem kod objekata s pokazivačima na istu alociranu memoriju  Doći će do problema kad se pozovu destruktori za ta dva objekta  Prvi poziv destruktora će biti OK, ali kad se pozove destruktor za drugi objekt, pokušaj oslobađanja već oslobođene memorije će generirati pogrešku !
  • 11. 11 Reference  Referenca = pokazivač s malo drukčijom sintaksom  Nema adresnog operatora i operatora indirekcije (dereferenciranja) !  Prevoditelj to obavlja automatski  Deklaracija reference se prepoznaje po prefiksu &
  • 12. 12 Primjer reference void main() { int a = 5; int *pa = &a; // pokazivač pa pokazuje na varijablu a int &ra = a; // referenca ra također referencira varijablu a int& ra2; // POGREŠKA – nedostaje inicijalizacija extern int& ra3; //OK – inicijalizacije se obavlja na nekom drugom mjestu *pa = 10; // varijabla a sada je jednaka 10 ra = 15; // a je sada jednako 15 }
  • 13. 13 Primjeri za vježbu:  Klasa Trokut:  Izgraditi klasu Trokut koja će predstavljati koncept trokuta kao geometrijskog lika koji ima definiranu duljinu svake od tri stranice i ugrađenu funkcionalnost za izračunavanje površine i opsega trokuta  Koje biste varijable članice definirali za ovu klasu?  Koje bi se funkcije članice mogle definirati za ovu klasu?
  • 14. 14 Primjeri za vježbu (2)  Klasa KompleksniBroj  Izgraditi klasu KompleksniBroj koja će predstavljati (matematički) koncept kompleksnog broja. Klasa mora sadržavati dvije varijable članice koje će predstavljati realni i imaginarni dio i pružati funkcionalnost za obavljanje matematičkih operacija s kompleksnim brojevima (zbrajanje, oduzimanje, množenje, dijeljenje, konjugiranje, apsolutna vrijednost, trigonometrijski oblik, korjenovanje, potenciranje)  Koji je problem kod korjenovanja?