Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
rafaelm Forumaš(ica)


Pridružen/a: 24. 12. 2006. (13:30:11) Postovi: (21F)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
Mad Wilson Forumaš(ica)


Pridružen/a: 29. 05. 2006. (22:51:14) Postovi: (121)16
|
|
[Vrh] |
|
rafaelm Forumaš(ica)


Pridružen/a: 24. 12. 2006. (13:30:11) Postovi: (21F)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 13:26 ned, 6. 4. 2008 Naslov: |
|
|
U tom slucaju, ovo od striceka Poludjelog Vilsona je prikladnije:
[code:1]#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(void) {
list<string> ls;
for (int i = 0; i < 3; ++i) {
char c;
cout << "Upisite znak: ";
cin >> c;
ls.push_front(string(1, c));
}
cout << "Lista: ";
for (list<string>::iterator it = ls.begin(); it != ls.end(); ++it)
cout << (it == ls.begin() ? "" : ", ") << *it;
cout << endl;
return 0;
}[/code:1]
Pardon my clumsiness; ja bas i ne znam C++. :oops:
U tom slucaju, ovo od striceka Poludjelog Vilsona je prikladnije:
Kod: | #include <iostream>
#include <string>
#include <list>
using namespace std;
int main(void) {
list<string> ls;
for (int i = 0; i < 3; ++i) {
char c;
cout << "Upisite znak: ";
cin >> c;
ls.push_front(string(1, c));
}
cout << "Lista: ";
for (list<string>::iterator it = ls.begin(); it != ls.end(); ++it)
cout << (it == ls.begin() ? "" : ", ") << *it;
cout << endl;
return 0;
} |
Pardon my clumsiness; ja bas i ne znam C++.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
rafaelm Forumaš(ica)


Pridružen/a: 24. 12. 2006. (13:30:11) Postovi: (21F)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
Mad Wilson Forumaš(ica)


Pridružen/a: 29. 05. 2006. (22:51:14) Postovi: (121)16
|
Postano: 16:13 ned, 6. 4. 2008 Naslov: |
|
|
Konstruktor (kao i svaki drugi) koji prima referencu na tip (const tip).
Specificnost copy-konstruktora je uporaba; koristi se prilikom kopiranja objekta u drugi objekt istog tipa, kao primjerice kod: vracanja vrijednosti iz funkcije (return), prenasanja argumenata funkciji (po vrijednosti) i jos mnogo drugdje.
Dakle, uoci da se i ovdje[code:1]mojTip a;
mojTip b(a); <-
[/code:1], ali i ovdje[code:1]
mojTip a;
nekaFunkcija(a); <-
[/code:1]pozove ista stvar: copy-konstruktor.
Sa (explicitnim) definiranjem copy-konstruktora htjet ces se baviti ako tvoj objekt ima pointere na polja (ili takvo stogod), sto compiler sam po sebi ne bi znao rjesiti (mozda zelis da oba objekta ne pokazuju na isto polje, nego na razlicita polja s istim sadrzajem; pogledaj primjer sa vjezbi).
Jasnije?
Konstruktor (kao i svaki drugi) koji prima referencu na tip (const tip).
Specificnost copy-konstruktora je uporaba; koristi se prilikom kopiranja objekta u drugi objekt istog tipa, kao primjerice kod: vracanja vrijednosti iz funkcije (return), prenasanja argumenata funkciji (po vrijednosti) i jos mnogo drugdje.
Dakle, uoci da se i ovdje Kod: | mojTip a;
mojTip b(a); <-
| , ali i ovdje Kod: |
mojTip a;
nekaFunkcija(a); <-
| pozove ista stvar: copy-konstruktor.
Sa (explicitnim) definiranjem copy-konstruktora htjet ces se baviti ako tvoj objekt ima pointere na polja (ili takvo stogod), sto compiler sam po sebi ne bi znao rjesiti (mozda zelis da oba objekta ne pokazuju na isto polje, nego na razlicita polja s istim sadrzajem; pogledaj primjer sa vjezbi).
Jasnije?
|
|
[Vrh] |
|
rafaelm Forumaš(ica)


Pridružen/a: 24. 12. 2006. (13:30:11) Postovi: (21F)16
Spol: 
Lokacija: Zagreb
|
|
[Vrh] |
|
Mad Wilson Forumaš(ica)


Pridružen/a: 29. 05. 2006. (22:51:14) Postovi: (121)16
|
Postano: 18:58 ned, 6. 4. 2008 Naslov: |
|
|
[quote="rafaelm"]Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli?[/quote]
Ako ga ne stavis, nece biti stavljen... :)
Obicno se stavlja da se izbjegnu nezgodnosti u nekim situacijama. Ovako se garantira da se objekt predan kao argument nece mjenjati sto je uglavnom u skladu s praksom; to je copy-konstuktor, argument se koristi da bi se na osnovi njega izradila kopija i kao takav (najcesce) ostaje nepromjenjen.
Takoder, to omogucava pozivanje konstruktora na const objektima.[code:1]
const tip a;
tip b(a);[/code:1]
[quote="rafaelm"]Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira...[/quote]
Upisi kolegij Objektno programiranje (C++). Mislim da ces tamo doseci nirvanu. ;)
EDIT: copy-con ne mora bas nuzno primati referencu na konstantan objekt (sad pogledao u primeru), da ti precizno odgovorim na pitanje. Ali ne znam, zasto bi itko napravio ista drugacije.
rafaelm (napisa): | Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli? |
Ako ga ne stavis, nece biti stavljen...
Obicno se stavlja da se izbjegnu nezgodnosti u nekim situacijama. Ovako se garantira da se objekt predan kao argument nece mjenjati sto je uglavnom u skladu s praksom; to je copy-konstuktor, argument se koristi da bi se na osnovi njega izradila kopija i kao takav (najcesce) ostaje nepromjenjen.
Takoder, to omogucava pozivanje konstruktora na const objektima. Kod: |
const tip a;
tip b(a); |
rafaelm (napisa): | Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira... |
Upisi kolegij Objektno programiranje (C++). Mislim da ces tamo doseci nirvanu.
EDIT: copy-con ne mora bas nuzno primati referencu na konstantan objekt (sad pogledao u primeru), da ti precizno odgovorim na pitanje. Ali ne znam, zasto bi itko napravio ista drugacije.
Zadnja promjena: Mad Wilson; 19:10 ned, 6. 4. 2008; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
mdoko Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol: 
Lokacija: Heriot-Watt University, Edinburgh
|
Postano: 19:01 ned, 6. 4. 2008 Naslov: |
|
|
[quote="rafaelm"]Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli?[/quote]
Argument copy konstruktora je [b]const referenca[/b] (tocnije: referenca na konstantni objekt). Referenca radi toga da bi se izbjeglo nepotrebno kopiranje potencijalno velike kolicine podataka, a const radi toga sto se u suprotnom ne bi mogla praviti kopija nekonstantnog objekta.
[quote]
Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira...[/quote]
Nazalost si u pravu, ali u satnici 1+2 nije ni moguce nista vise napraviti. Ipak, tome se lako doskoci: uzmi neku knjigu i citaj. Preporucam: [url=http://www.amazon.com/C%2B%2B-Primer-4th-Stanley-Lippman/dp/0201721481/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1207504848&sr=8-1]C++ Primer[/url].
rafaelm (napisa): | Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli? |
Argument copy konstruktora je const referenca (tocnije: referenca na konstantni objekt). Referenca radi toga da bi se izbjeglo nepotrebno kopiranje potencijalno velike kolicine podataka, a const radi toga sto se u suprotnom ne bi mogla praviti kopija nekonstantnog objekta.
Citat: |
Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira... |
Nazalost si u pravu, ali u satnici 1+2 nije ni moguce nista vise napraviti. Ipak, tome se lako doskoci: uzmi neku knjigu i citaj. Preporucam: C++ Primer.
_________________ Extraordinary claims require extraordinary evidence. – Carl Sagan
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 19:39 ned, 6. 4. 2008 Naslov: |
|
|
[quote="mdoko"][quote="rafaelm"]Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli?[/quote]
Argument copy konstruktora je [b]const referenca[/b] (tocnije: referenca na konstantni objekt). Referenca radi toga da bi se izbjeglo nepotrebno kopiranje potencijalno velike kolicine podataka, a const radi toga sto se u suprotnom ne bi mogla praviti kopija nekonstantnog objekta.[/quote]
Na primjer, ovo se ne da compilirati:
[code:1]#include <iostream>
using namespace std;
void ispisi_znak(char &c) {
cout << c;
}
int main(void) {
ispisi_znak('x');
return 0;
}[/code:1]
Ono sto te tu snadje, compiler objasnjava s
[code:1]t.cpp: In function ‘int main()’:
t.cpp:10: error: invalid initialization of non-const reference of type ‘char&’ from a temporary of type ‘char’
t.cpp:5: error: in passing argument 1 of ‘void ispisi_znak(char&)’[/code:1]
No, ako se
[tt]void ispisi_znak(char &c)[/tt]
zamijeni s
[tt]void ispisi_znak(const char &c)[/tt],
stvar radi! :D
Naravno, bez [tt]const[/tt], ti u funkciji mozes mijenjati [tt]c[/tt], sto je krajnje nelogicno ako je tvoj [tt]c[/tt] zapravo onaj [tt]'x'[/tt] (napominjem: ne samo da sadrzi [tt]'x'[/tt], nego on [b]JE[/b] taj [tt]'x'[/tt]!). :)
mdoko (napisa): | rafaelm (napisa): | Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli? |
Argument copy konstruktora je const referenca (tocnije: referenca na konstantni objekt). Referenca radi toga da bi se izbjeglo nepotrebno kopiranje potencijalno velike kolicine podataka, a const radi toga sto se u suprotnom ne bi mogla praviti kopija nekonstantnog objekta. |
Na primjer, ovo se ne da compilirati:
Kod: | #include <iostream>
using namespace std;
void ispisi_znak(char &c) {
cout << c;
}
int main(void) {
ispisi_znak('x');
return 0;
} |
Ono sto te tu snadje, compiler objasnjava s
Kod: | t.cpp: In function ‘int main()’:
t.cpp:10: error: invalid initialization of non-const reference of type ‘char&’ from a temporary of type ‘char’
t.cpp:5: error: in passing argument 1 of ‘void ispisi_znak(char&)’ |
No, ako se
void ispisi_znak(char &c)
zamijeni s
void ispisi_znak(const char &c),
stvar radi!
Naravno, bez const, ti u funkciji mozes mijenjati c, sto je krajnje nelogicno ako je tvoj c zapravo onaj 'x' (napominjem: ne samo da sadrzi 'x', nego on JE taj 'x'!).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
vinko Forumaš(ica)

Pridružen/a: 26. 08. 2006. (23:08:00) Postovi: (1A8)16
Spol: 
Lokacija: PMF-MO 214
|
Postano: 22:18 ned, 6. 4. 2008 Naslov: |
|
|
[quote="rafaelm"]Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli?
Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira...[/quote]
Sori, ako se tako osjećate. Pa pitajte što vam ne bude jasno.
Inače, na reference i const ćemo potrošiti jedne skoro cijele vježbe (br. 7), a vjerojatno i na kopiranje objekata s dinamičkim elementima (copy-konstruktor, destruktor i operator pridruživanja, 9. vjezbe)
rafaelm (napisa): | Da, jasnije mi je, al ne pretjerano. Zašto se npr. stavlja const tip u popisu varijabli?
Nekako mi se čini da nas na vježbama više uče šablonama, nego zašto i kako to funkcionira... |
Sori, ako se tako osjećate. Pa pitajte što vam ne bude jasno.
Inače, na reference i const ćemo potrošiti jedne skoro cijele vježbe (br. 7), a vjerojatno i na kopiranje objekata s dinamičkim elementima (copy-konstruktor, destruktor i operator pridruživanja, 9. vjezbe)
|
|
[Vrh] |
|
|