Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Operatori (objasnjenje gradiva)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Računarski praktikum 1
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
BlameGame
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 09. 2011. (19:17:53)
Postovi: (6C)16
Sarma = la pohva - posuda
= 4 - 3

PostPostano: 21:01 sri, 25. 6. 2014    Naslov: Operatori Citirajte i odgovorite

razlomak& operator*=(const razlomak& b)
{
*this = *this * b;
return *this;
}

razlomak operator/(const razlomak& b) const
{
razlomak rez;
rez.p = p * b.q;
rez.q = q * b.p;
return rez;
}

E sad par pitanja, svejedno je koji se nacin koristi? Oba su dobra za svaki slucaj? Dalje, zasto je argument b tipa const razlomak&? zasto mora biti const i zasto uzimamo razlomak&, da li bi radilo samo sa razlomak b? ako i bi zasto je ovo bolje i zasto u drugoj verziji ispred tijela funkcije stavljamo opet const?
razlomak& operator*=(const razlomak& b)
{
*this = *this * b;
return *this;
}

razlomak operator/(const razlomak& b) const
{
razlomak rez;
rez.p = p * b.q;
rez.q = q * b.p;
return rez;
}

E sad par pitanja, svejedno je koji se nacin koristi? Oba su dobra za svaki slucaj? Dalje, zasto je argument b tipa const razlomak&? zasto mora biti const i zasto uzimamo razlomak&, da li bi radilo samo sa razlomak b? ako i bi zasto je ovo bolje i zasto u drugoj verziji ispred tijela funkcije stavljamo opet const?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
nuclear
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 13. 11. 2011. (17:40:12)
Postovi: (74)16
Spol: žensko
Sarma = la pohva - posuda
10 = 20 - 10

PostPostano: 10:05 čet, 26. 6. 2014    Naslov: Citirajte i odgovorite

I mene to zbunjuje, također zašto je u jednom slučaju funkcija const a prima i neconst varijable...to s tim const mi nikako nije jasno...

[size=9][color=#999999]Added after 52 minutes:[/color][/size]

Ove odgovore sam našla u "Demistificirani c++":

Upotreba referenci i pokazivaèa je ipak neizbježna kada funkcija treba istovremeno promijeniti dva ili više objekata, ili kada se funkciji moraju prenijeti velike strukture podataka, poput polja (vidi sljedeæi odjeljak 7.4.5). U takvim prilikama, ako funkcija ne mijenja vrijednosti argumenata, korisna je navika deklarirati te argumente nepromjenjivima pomoæu kljuène rijeèi const.

Da bi se izbjegle neprilike koje naknadne nepažljive promjene kôda mogu
izazvati, preporučljivo je argumente koji se prenose preko pokazivača ili
referenci, a koji se ne žele mijenjati, učiniti konstantnima.

Èak ako i ne mijenjamo vrijednosti na koje pokazivaè pokazuje unutar funkcije DuljinaNiza(), prevoditelj to ne može znati. Iz svoje paranoje on æe sprijeèiti gornji pokušaj pridruživanja nepromjenivog objekta promjenjivom parametru kako bi se osiguralo da objekt u svakom sluèaju ostane nepromijenjen (lat. object intacta). Zbog toga ako funkcija ne mijenja svoje parametre, poželjno je to obznaniti javno tako da se umetne modifikator const u listu parametara.


Više o tome od stranice 253...iako mi je teško samoj to istraživati u tako velikom fajlu. Sretno!

http://www.oss.unist.hr/~jvrlic/dokumenti/OOP/demistificirani_c++.pdf
I mene to zbunjuje, također zašto je u jednom slučaju funkcija const a prima i neconst varijable...to s tim const mi nikako nije jasno...

Added after 52 minutes:

Ove odgovore sam našla u "Demistificirani c++":

Upotreba referenci i pokazivaèa je ipak neizbježna kada funkcija treba istovremeno promijeniti dva ili više objekata, ili kada se funkciji moraju prenijeti velike strukture podataka, poput polja (vidi sljedeæi odjeljak 7.4.5). U takvim prilikama, ako funkcija ne mijenja vrijednosti argumenata, korisna je navika deklarirati te argumente nepromjenjivima pomoæu kljuène rijeèi const.

Da bi se izbjegle neprilike koje naknadne nepažljive promjene kôda mogu
izazvati, preporučljivo je argumente koji se prenose preko pokazivača ili
referenci, a koji se ne žele mijenjati, učiniti konstantnima.

Èak ako i ne mijenjamo vrijednosti na koje pokazivaè pokazuje unutar funkcije DuljinaNiza(), prevoditelj to ne može znati. Iz svoje paranoje on æe sprijeèiti gornji pokušaj pridruživanja nepromjenivog objekta promjenjivom parametru kako bi se osiguralo da objekt u svakom sluèaju ostane nepromijenjen (lat. object intacta). Zbog toga ako funkcija ne mijenja svoje parametre, poželjno je to obznaniti javno tako da se umetne modifikator const u listu parametara.


Više o tome od stranice 253...iako mi je teško samoj to istraživati u tako velikom fajlu. Sretno!

http://www.oss.unist.hr/~jvrlic/dokumenti/OOP/demistificirani_c++.pdf


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Cobs
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 21. 01. 2008. (13:32:15)
Postovi: (206)16
Spol: muško
Sarma = la pohva - posuda
26 = 40 - 14
Lokacija: Geto

PostPostano: 13:36 čet, 26. 6. 2014    Naslov: Citirajte i odgovorite

Makar ne znam kaj te točno buni tj. zanima objasnit ću ukratko sve kaj bi moglo bit nejasno.

1. zašto se proslijeđuju reference?

Prilikom pozivanja funkcija, funkcije rade svoje kopije argumenata, pa ako se radi o nekim velikim klasama/strukturama troši se dodatno vrijeme i memorija na kreiranje lokalnih kopija argumenata. Kada proslijedimo referencu, tada se iskopira samo referenca na neku postojeću klasu i time smo uštedjeli i vrijeme i memoriju. Također, preko reference je moguće pristupiti strukturi/objektu/varijabli koja proslijeđena kao argument funkcije i promijeniti je. (Nešto slično pokazivačima, ali sa jednostavnijom sintaksom za većinu ljudi)

2. Zašto ide const referenca?

ključna riječ const postavlja se isključivo iz razloga da se spriječi mijenjanje reference. Znači, želimo uštedjeti na memoriji i vremenu, ali ne želimo da to dovede do nekog nepoželjnog, slučajnog ili namjernog mijenjanja onog što proslijeđujemo kao argument

To se sve može malo detaljnije objašnjeno može naći i [url=http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/]ovdje[/url]. (prvi rezultat guglanja)

3. Ključna riječ const nakon funkcije? Znači da pozvana funkcija neće promijeniti niti jednu varijablu unutar objekta koji ju je pozvao. Osim specijalnih mutable varijabla, al ne znam dal ste to radili ili koristite li ih uopće.

4. Zašto je povratna vrijednost funkcije referenca?

Ovdje je najveća razlika u dva koda, jer gornje dva detalja možda i nisu toliko ključna za značenje koda (tj. ako se korektno napiše na bilo koji način, ključne riječi i reference nisu toliko bitne, naravno ako nam memorija i vrijeme nisu neki važni resursi).

U pravilu kada se vraća referenca ona se vraća kako bi se mogao [url=http://en.wikipedia.org/wiki/Method_chaining]ulančati poziv funkcija[/url]. Naravno može se to koristiti i za neke druge stvari, no za ovo se koristi najčešće, a ako te zanima više malo pretraži internet.

Druga funkcija vraća kopiju lokalne varijable funkcije. Bitno je da se zna da se ta vraćena struktura kopira po vrijednosti. Takozvana [i]plitka[/i] ili [i]površna[/i] kopija, nešto o takvom, ali o drukčijim kopiranjima ima [url=http://en.wikipedia.org/wiki/Object_copy]ovdje[/url]
Makar ne znam kaj te točno buni tj. zanima objasnit ću ukratko sve kaj bi moglo bit nejasno.

1. zašto se proslijeđuju reference?

Prilikom pozivanja funkcija, funkcije rade svoje kopije argumenata, pa ako se radi o nekim velikim klasama/strukturama troši se dodatno vrijeme i memorija na kreiranje lokalnih kopija argumenata. Kada proslijedimo referencu, tada se iskopira samo referenca na neku postojeću klasu i time smo uštedjeli i vrijeme i memoriju. Također, preko reference je moguće pristupiti strukturi/objektu/varijabli koja proslijeđena kao argument funkcije i promijeniti je. (Nešto slično pokazivačima, ali sa jednostavnijom sintaksom za većinu ljudi)

2. Zašto ide const referenca?

ključna riječ const postavlja se isključivo iz razloga da se spriječi mijenjanje reference. Znači, želimo uštedjeti na memoriji i vremenu, ali ne želimo da to dovede do nekog nepoželjnog, slučajnog ili namjernog mijenjanja onog što proslijeđujemo kao argument

To se sve može malo detaljnije objašnjeno može naći i ovdje. (prvi rezultat guglanja)

3. Ključna riječ const nakon funkcije? Znači da pozvana funkcija neće promijeniti niti jednu varijablu unutar objekta koji ju je pozvao. Osim specijalnih mutable varijabla, al ne znam dal ste to radili ili koristite li ih uopće.

4. Zašto je povratna vrijednost funkcije referenca?

Ovdje je najveća razlika u dva koda, jer gornje dva detalja možda i nisu toliko ključna za značenje koda (tj. ako se korektno napiše na bilo koji način, ključne riječi i reference nisu toliko bitne, naravno ako nam memorija i vrijeme nisu neki važni resursi).

U pravilu kada se vraća referenca ona se vraća kako bi se mogao ulančati poziv funkcija. Naravno može se to koristiti i za neke druge stvari, no za ovo se koristi najčešće, a ako te zanima više malo pretraži internet.

Druga funkcija vraća kopiju lokalne varijable funkcije. Bitno je da se zna da se ta vraćena struktura kopira po vrijednosti. Takozvana plitka ili površna kopija, nešto o takvom, ali o drukčijim kopiranjima ima ovdje


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
BlameGame
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 09. 2011. (19:17:53)
Postovi: (6C)16
Sarma = la pohva - posuda
= 4 - 3

PostPostano: 16:03 čet, 26. 6. 2014    Naslov: Citirajte i odgovorite

Hvala!!!
Hvala!!!


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Računarski praktikum 1 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Možete otvarati nove teme.
Možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You can attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan