Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 11:22 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Anonymous"]
nije mi jasno ovo s mijenjanjem nosivosti s operatorom[] s lijeve strane pridruživanja, iznad piše da taj operator vraća nosivost nekog vagona, ovisno o x-u,dakle vraća neki double, kako ću sad odjednom vratiti i pointer ili referncu?[/quote]
Imat ćeš nešto tipa[code:1]double operator[] (int x) const;
double &operator[](int x);[/code:1]
Ako koristiš prvog onda ne mijenjaš varijablu nikakvu.
[quote]da li recimo unarni operator-- može biti void ili vraća referencu na vlak, i što znači da na praznom vlaku nema efekta, to jednostavno zanemarimo,kao to se ne može dogoditi?[/quote]Nisam siguran može li unarni -- bit tipa void, u svakom slučaju ti treba nešto ala
[code:1]
Vlak &operator--();
Vlak operator--(int);
[/code:1]
Prvi je za --V a drugi za V--
Anonymous (napisa): |
nije mi jasno ovo s mijenjanjem nosivosti s operatorom[] s lijeve strane pridruživanja, iznad piše da taj operator vraća nosivost nekog vagona, ovisno o x-u,dakle vraća neki double, kako ću sad odjednom vratiti i pointer ili referncu? |
Imat ćeš nešto tipa Kod: | double operator[] (int x) const;
double &operator[](int x); |
Ako koristiš prvog onda ne mijenjaš varijablu nikakvu.
Citat: | da li recimo unarni operator– može biti void ili vraća referencu na vlak, i što znači da na praznom vlaku nema efekta, to jednostavno zanemarimo,kao to se ne može dogoditi? | Nisam siguran može li unarni – bit tipa void, u svakom slučaju ti treba nešto ala
Kod: |
Vlak &operator--();
Vlak operator--(int);
|
Prvi je za –V a drugi za V–
_________________ -- space available for rent --
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 11:44 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Anonymous"]mislim da ti nedostaje referenca i u ovom drugom operatoru--(int)...shvatila sam, hvala :D[/quote]Ne nedostaje. Primjer imaš sljedeći kod:
[code:1]Vlak a, b, c;
// ...
b = a++;
c = ++a;[/code:1]
U gornjem kodu b postaje a pa se onda a uveća dok c postane uvećani a.
Primjer punog koda:
[code:1]class Integer
{
int x;
public:
int &operator--() { x = x - 1; return x; }
int operator--() {int pom = x; x = x + 1; return pom; }
};[/code:1]
[quote]Što znači ovo da treba podržavti ulančavanje gdje god je to moguće?[/quote]
Znači da želiš moći napraviti ovo:
[code:1]Vlak | 1 | 2 | 1.2;[/code:1]
Dakle binarni operator mora vratiti lijevi argument tog operatora.
[quote]i ova zadnja rečenica : operatori koji ne mijenjaju operande trebaju se moći pozvati i na const refrencama na vlakove, to vrijedi kod nečlanksi f-ja i treba biti npr.operator&(const Vlak& v1, const Vlak& v2); ?[/quote]
To znači da je funkcija definirana kao
[code:1]tip ime_fje(args...) [b]const[/b];[/code:1]
Anonymous (napisa): | mislim da ti nedostaje referenca i u ovom drugom operatoru–(int)...shvatila sam, hvala | Ne nedostaje. Primjer imaš sljedeći kod:
Kod: | Vlak a, b, c;
// ...
b = a++;
c = ++a; |
U gornjem kodu b postaje a pa se onda a uveća dok c postane uvećani a.
Primjer punog koda:
Kod: | class Integer
{
int x;
public:
int &operator--() { x = x - 1; return x; }
int operator--() {int pom = x; x = x + 1; return pom; }
}; |
Citat: | Što znači ovo da treba podržavti ulančavanje gdje god je to moguće? |
Znači da želiš moći napraviti ovo:
Dakle binarni operator mora vratiti lijevi argument tog operatora.
Citat: | i ova zadnja rečenica : operatori koji ne mijenjaju operande trebaju se moći pozvati i na const refrencama na vlakove, to vrijedi kod nečlanksi f-ja i treba biti npr.operator&(const Vlak& v1, const Vlak& v2); ? |
To znači da je funkcija definirana kao
Kod: | tip ime_fje(args...) [b]const[/b]; |
_________________ -- space available for rent --
Zadnja promjena: pecina; 12:07 uto, 1. 6. 2010; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 12:09 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Anonymous"]da, sad si me zbunio :shock:
ali što mi ne mijenjamo u operatoru--(int) taj vlak,izbacujemo iz njega jedan vagon, dakle moramo vratit referncu(return *this) a ne stvoriti neki novi vlak??[/quote]
Eh, primjeti ovo:[code:1]
int a1 = 4, a2 = 4, b, c;
b = a1++;
c = ++a2;
[/code:1]
Na kraju je a1=a2=5, b=4 i c = 5.
Dakle kada imamo ++objekt onda se prvo taj objekt poveća pa se ta povećana vrijednost pridruži. Kada imamo objekt++ onda se prvo pridruži vrijednost od objekta a tek onda objekt poveća.
Operatori --a i a-- oba smanjuju a samo što ne vraćaju isto. Prvi vraća smanjenu vrijednost a drugi vrijednost [b]prije[/b] smanjivanja. Zato kreiramo privremeni objekt.
Anonymous (napisa): | da, sad si me zbunio
ali što mi ne mijenjamo u operatoru–(int) taj vlak,izbacujemo iz njega jedan vagon, dakle moramo vratit referncu(return *this) a ne stvoriti neki novi vlak?? |
Eh, primjeti ovo: Kod: |
int a1 = 4, a2 = 4, b, c;
b = a1++;
c = ++a2;
|
Na kraju je a1=a2=5, b=4 i c = 5.
Dakle kada imamo ++objekt onda se prvo taj objekt poveća pa se ta povećana vrijednost pridruži. Kada imamo objekt++ onda se prvo pridruži vrijednost od objekta a tek onda objekt poveća.
Operatori –a i a– oba smanjuju a samo što ne vraćaju isto. Prvi vraća smanjenu vrijednost a drugi vrijednost prije smanjivanja. Zato kreiramo privremeni objekt.
_________________ -- space available for rent --
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 12:28 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Raz"]Zadatak s bocom.
Treba imati implementirane i sljedeće operatore, "koji trebaju podržavati ulančavanje gdje god je to moguće".
Jel mi moze netko objasniti ili dati neki primjer mogucih ulancavanja? Nije mi bas jasno za koje bi to operatore trebalo i u kojim situacijama bi to trebalo raditi?[/quote]
To je operator <<.
[code:1]Boca a, b, c, d;
cout << a << b << c << d;[/code:1]
Raz (napisa): | Zadatak s bocom.
Treba imati implementirane i sljedeće operatore, "koji trebaju podržavati ulančavanje gdje god je to moguće".
Jel mi moze netko objasniti ili dati neki primjer mogucih ulancavanja? Nije mi bas jasno za koje bi to operatore trebalo i u kojim situacijama bi to trebalo raditi? |
To je operator <<.
Kod: | Boca a, b, c, d;
cout << a << b << c << d; |
_________________ -- space available for rent --
Zadnja promjena: pecina; 13:22 uto, 1. 6. 2010; ukupno mijenjano 1 put.
|
|
[Vrh] |
|
mycky1111 Forumaš(ica)
Pridružen/a: 26. 05. 2008. (11:59:07) Postovi: (D4)16
Spol:
|
Postano: 12:56 uto, 1. 6. 2010 Naslov: |
|
|
[quote="pecina"]
To su ti operator <<, >>.
[code:1]Boca a, b, c, d;
cout << a << b << c << d;
a << b << c;
a >> c >> d;[/code:1][/quote]
kako je to moguce, kad << i >> vracaju int, tj. broj prelivenih litara, a ne bocu? onda u drugom koraku prelijevas int u bocu ili bocu u int?
pecina (napisa): |
To su ti operator <<, >>.
Kod: | Boca a, b, c, d;
cout << a << b << c << d;
a << b << c;
a >> c >> d; |
|
kako je to moguce, kad << i >> vracaju int, tj. broj prelivenih litara, a ne bocu? onda u drugom koraku prelijevas int u bocu ili bocu u int?
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 13:22 uto, 1. 6. 2010 Naslov: |
|
|
[quote="mycky1111"][quote="pecina"]
To su ti operator <<, >>.
[code:1]Boca a, b, c, d;
cout << a << b << c << d;
a << b << c;
a >> c >> d;[/code:1][/quote]
kako je to moguce, kad << i >> vracaju int, tj. broj prelivenih litara, a ne bocu? onda u drugom koraku prelijevas int u bocu ili bocu u int?[/quote]
Istina, popravio sam. :oops:
mycky1111 (napisa): | pecina (napisa): |
To su ti operator <<, >>.
Kod: | Boca a, b, c, d;
cout << a << b << c << d;
a << b << c;
a >> c >> d; |
|
kako je to moguce, kad << i >> vracaju int, tj. broj prelivenih litara, a ne bocu? onda u drugom koraku prelijevas int u bocu ili bocu u int? |
Istina, popravio sam.
_________________ -- space available for rent --
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
HHH Gost
|
|
[Vrh] |
|
Gost
|
|
[Vrh] |
|
Gino Forumaš(ica)
Pridružen/a: 11. 09. 2008. (10:54:06) Postovi: (370)16
Lokacija: Pula
|
|
[Vrh] |
|
Gost
|
Postano: 17:43 uto, 1. 6. 2010 Naslov: |
|
|
:) hvala gino:) ali onda treba biti 0-20 svi brojevi, jer ako pogledaš one brojeve, fale 1,4,7,10,13,16. A ako idem tako da napunim 20 prebacim 1 u onu manju, tada mi je manja puna (3) a velika ima 19, praznim malu i prebacujem iz velike, taman ću dobivati 16,13,10,7,4,1.
hvala gino:) ali onda treba biti 0-20 svi brojevi, jer ako pogledaš one brojeve, fale 1,4,7,10,13,16. A ako idem tako da napunim 20 prebacim 1 u onu manju, tada mi je manja puna (3) a velika ima 19, praznim malu i prebacujem iz velike, taman ću dobivati 16,13,10,7,4,1.
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
Postano: 17:43 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Anonymous"]jel trebamo imati i private dio ili sve može biti public?[/quote]Ne moraš ali generalna je praksa da varijable stoje u private dijelu.
[quote="HHH"]jel to znaci da kod boca uopce nema ulančavanja?[/quote]
Ima samo kod operator << za ispis tj.
[code:1]ostream& operator << (ostream &os, Boca &b);[/code:1]
[quote="Anonymous"]:) i meni su isti ti brojevi. Nadam se da nemamo istu grešku pa da je slučajno.
Što se tiče ulančavanja, meni radi normalno ako napravim a<<b; c<<a; dakle ono što je bilo u b je prešlo u a, pa iz a u c. Ali ako stavim c<<a<<b ništa mi ne napravi, ostavi ih sve nepromijenjene. Ne znam kako to popraviti jer ne znam gdje mi je greška:([/quote]
Tu nema ulančavanja tako da zanemari to. Kompajlira ti se samo zato jer postoji konstruktor koji prima int a operator <<vraća int.
Primjer: a << b << c je ekvivalentno sa (a << b) << c.
Izvršavanje dijela u zagradi rezultira sa brojem prelivenih litara tj. neki broj n pa izraz (a << b) << c postaje n << c.
Sad, ako si definirala operator << kao friend onda je vrlo vjerojatno kompajler pretvorio broj n u bocu što znači da je boca puna i kapacitet joj je n. Prelijevanje N << c nema efekta jer je boca N puna pa je c ostao isti.
Anonymous (napisa): | jel trebamo imati i private dio ili sve može biti public? | Ne moraš ali generalna je praksa da varijable stoje u private dijelu.
HHH (napisa): | jel to znaci da kod boca uopce nema ulančavanja? |
Ima samo kod operator << za ispis tj.
Kod: | ostream& operator << (ostream &os, Boca &b); |
Anonymous (napisa): | i meni su isti ti brojevi. Nadam se da nemamo istu grešku pa da je slučajno.
Što se tiče ulančavanja, meni radi normalno ako napravim a<<b; c<<a; dakle ono što je bilo u b je prešlo u a, pa iz a u c. Ali ako stavim c<<a<<b ništa mi ne napravi, ostavi ih sve nepromijenjene. Ne znam kako to popraviti jer ne znam gdje mi je greška:( |
Tu nema ulančavanja tako da zanemari to. Kompajlira ti se samo zato jer postoji konstruktor koji prima int a operator <<vraća int.
Primjer: a << b << c je ekvivalentno sa (a << b) << c.
Izvršavanje dijela u zagradi rezultira sa brojem prelivenih litara tj. neki broj n pa izraz (a << b) << c postaje n << c.
Sad, ako si definirala operator << kao friend onda je vrlo vjerojatno kompajler pretvorio broj n u bocu što znači da je boca puna i kapacitet joj je n. Prelijevanje N << c nema efekta jer je boca N puna pa je c ostao isti.
_________________ -- space available for rent --
|
|
[Vrh] |
|
Gost
|
Postano: 17:46 uto, 1. 6. 2010 Naslov: |
|
|
[quote="Raz"]Dal su ovo sve kombinacije za boce (3,20)&(2,3):
0
2
3
5
6
8
9
11
12
14
15
17
18
19
20[/quote]
ako (3,20) oznacava bocu kapaciteta 20 u kojoj trenutno ima 3 litre, fali ti 1 u tom ispisu. do toga se moze doci ako se isprazne obje boce i druga se puni i prebacuje u prvu sve dok je to moguce.
izgledalo bi ovako:
(0,20)<<(3,3)
(3,20)<<(3,3)
(6,20)<<(3,3)
(9,20)<<(3,3)
(12,20)<<(3,3)
(15,20)<<(3,3)
(18,20)<<(3,3)
(20,20)<<(1,3)
Raz (napisa): | Dal su ovo sve kombinacije za boce (3,20)&(2,3):
0
2
3
5
6
8
9
11
12
14
15
17
18
19
20 |
ako (3,20) oznacava bocu kapaciteta 20 u kojoj trenutno ima 3 litre, fali ti 1 u tom ispisu. do toga se moze doci ako se isprazne obje boce i druga se puni i prebacuje u prvu sve dok je to moguce.
izgledalo bi ovako:
(0,20)<<(3,3)
(3,20)<<(3,3)
(6,20)<<(3,3)
(9,20)<<(3,3)
(12,20)<<(3,3)
(15,20)<<(3,3)
(18,20)<<(3,3)
(20,20)<<(1,3)
|
|
[Vrh] |
|
Raz Forumaš(ica)
Pridružen/a: 07. 02. 2005. (22:40:23) Postovi: (6F)16
Lokacija: Tamo gdje ribe jedu avanturiste...
|
|
[Vrh] |
|
|