Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
fmilink Forumaš(ica)
Pridružen/a: 03. 01. 2013. (20:23:38) Postovi: (C)16
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
|
[Vrh] |
|
Ryssa Forumaš(ica)
Pridružen/a: 18. 12. 2011. (00:10:28) Postovi: (57)16
|
|
[Vrh] |
|
Shirohige Forumaš(ica)
Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16
Spol:
|
|
[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: 9:32 pet, 13. 6. 2014 Naslov: Re: 4. zadaća |
|
|
Zlatno pravilo kod const-a ti je: stavi ga gdje god možeš, osim tamo gdje ne možeš.
Drugim riječima, stavi const na svaku člansku funkciju koja ne mijenja vlasnika (i operatori su članske funkcije) i neka svi parametri koji nisu obični tipovi (float, int, char, ) neka budu const & ili const*.
I onda si na konju :)
[size=9][color=#999999]Added after 13 minutes:[/color][/size]
[quote="fmilink"]Imam zadaću Surd.
1. Je li bitno na koji način implementiram NaS vrijednost? Odnosno mora li ovo Surd::NaS imati smisla?
2. Trebamo li implementirati operatore +,- i * za kombinacije int-Surd, Surd-int i slično?[/quote]
[quote="Ryssa"]Imam jedno pitanje...ako imamo klasu razlomak koja predstavlja brojnik i nazivnik i imamo predefiniran operator *....zanima me zašto ovo radi
A=2*B. Napominjem da je to sa vježbi http://web.math.pmf.unizg.hr/nastava/rp1/slideovi/vjezbe_09.pdf 11. slajd. Operator * je predefiniran izvan klase i njegovi parametri su (const razlomak& a,const razlomak& b) pa me zanima na koji način se dvojka može shvatiti kao ralomak..tj što se zbiva u pozadini :)[/quote]
Imate obojica isto pitanje pa da odgovorim jednom. Recimo da imate ovakvu klasu:
[code:1]class Foo
{
public:
Foo() {}
Foo(int i) {}
Foo operator +(Foo const &) const
{
return Foo();
}
};[/code:1]
S obzirom da je operator + binaran, lijevi operand je [i]implicitno[/i] tipa Foo const& odnosno operator + djeluje na sljedeći način:
[code:1]Foo a, b;
Foo c = a + b;
// ovo je isto kao i gore
Foo c = a.operator +(b);[/code:1]
U ovom slučaju je operator +, makar binaran, članska funkcija i kao takav mora djelovati na definiranom tipu (ili izvedenim klasama).
No, u slučaju da definirate binarni operator kao globalnu funkciju (obrišite onaj gore operator +):
[code:1]Foo operator +(Foo const &, Foo const &)
{
return Foo();
}[/code:1]
tada kod od maloprije ima drukčije značenje:
[code:1]Foo a, b;
Foo c = a + b;
// ovo je isto kao i gore
Foo c = operator +(a, b);[/code:1]
E sada, kako su a i b samo parametri funkciji, postoji nešto što se zove korisnički definirana konverzija. Ako pogledate konstruktore od Foo, vidjet ćete da postoji konstruktor koji prima argument tipa int. Upravo zahvaljujući tom konstruktoru moguća je jedna (maksimalno) konverzija pa će sljedeći primjer raditi:
[code:1]int i = 1;
Foo a;
Foo b = i + a;
Foo c = a + i;[/code:1]
Ako pak imate takav konstruktor i to [b]ne želite[/b], onda definirate konstruktor kao eksplicitan:
[code:1]explicit Foo(int i) {}[/code:1]
I onda se neće raditi ta konverzija i morate ručno pisati operatore koji primaju int i Foo.
Jasnije?
Zlatno pravilo kod const-a ti je: stavi ga gdje god možeš, osim tamo gdje ne možeš.
Drugim riječima, stavi const na svaku člansku funkciju koja ne mijenja vlasnika (i operatori su članske funkcije) i neka svi parametri koji nisu obični tipovi (float, int, char, ) neka budu const & ili const*.
I onda si na konju
Added after 13 minutes:
fmilink (napisa): | Imam zadaću Surd.
1. Je li bitno na koji način implementiram NaS vrijednost? Odnosno mora li ovo Surd::NaS imati smisla?
2. Trebamo li implementirati operatore +,- i * za kombinacije int-Surd, Surd-int i slično? |
Ryssa (napisa): | Imam jedno pitanje...ako imamo klasu razlomak koja predstavlja brojnik i nazivnik i imamo predefiniran operator *....zanima me zašto ovo radi
A=2*B. Napominjem da je to sa vježbi http://web.math.pmf.unizg.hr/nastava/rp1/slideovi/vjezbe_09.pdf 11. slajd. Operator * je predefiniran izvan klase i njegovi parametri su (const razlomak& a,const razlomak& b) pa me zanima na koji način se dvojka može shvatiti kao ralomak..tj što se zbiva u pozadini |
Imate obojica isto pitanje pa da odgovorim jednom. Recimo da imate ovakvu klasu:
Kod: | class Foo
{
public:
Foo() {}
Foo(int i) {}
Foo operator +(Foo const &) const
{
return Foo();
}
}; |
S obzirom da je operator + binaran, lijevi operand je implicitno tipa Foo const& odnosno operator + djeluje na sljedeći način:
Kod: | Foo a, b;
Foo c = a + b;
// ovo je isto kao i gore
Foo c = a.operator +(b); |
U ovom slučaju je operator +, makar binaran, članska funkcija i kao takav mora djelovati na definiranom tipu (ili izvedenim klasama).
No, u slučaju da definirate binarni operator kao globalnu funkciju (obrišite onaj gore operator +):
Kod: | Foo operator +(Foo const &, Foo const &)
{
return Foo();
} |
tada kod od maloprije ima drukčije značenje:
Kod: | Foo a, b;
Foo c = a + b;
// ovo je isto kao i gore
Foo c = operator +(a, b); |
E sada, kako su a i b samo parametri funkciji, postoji nešto što se zove korisnički definirana konverzija. Ako pogledate konstruktore od Foo, vidjet ćete da postoji konstruktor koji prima argument tipa int. Upravo zahvaljujući tom konstruktoru moguća je jedna (maksimalno) konverzija pa će sljedeći primjer raditi:
Kod: | int i = 1;
Foo a;
Foo b = i + a;
Foo c = a + i; |
Ako pak imate takav konstruktor i to ne želite, onda definirate konstruktor kao eksplicitan:
Kod: | explicit Foo(int i) {} |
I onda se neće raditi ta konverzija i morate ručno pisati operatore koji primaju int i Foo.
Jasnije?
_________________ -- space available for rent --
|
|
[Vrh] |
|
dodgin_lions Forumaš(ica)
Pridružen/a: 24. 07. 2012. (14:49:47) Postovi: (22)16
Spol:
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
|
[Vrh] |
|
Shirohige Forumaš(ica)
Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16
Spol:
|
|
[Vrh] |
|
zvons Forumaš(ica)
Pridružen/a: 18. 11. 2012. (16:13:44) Postovi: (1B)16
|
|
[Vrh] |
|
Shirohige Forumaš(ica)
Pridružen/a: 16. 11. 2012. (20:19:56) Postovi: (ED)16
Spol:
|
|
[Vrh] |
|
la mer Forumaš(ica)
Pridružen/a: 19. 09. 2012. (17:39:46) Postovi: (F)16
|
|
[Vrh] |
|
delilah01. Forumaš(ica)
Pridružen/a: 10. 11. 2011. (22:50:23) Postovi: (39)16
|
Postano: 21:17 uto, 24. 6. 2014 Naslov: Re: ispravak zadaća |
|
|
[quote="la mer"]Zna li itko išta o tome kada će se i kako kod profesora ispravljati zadaće?
Ono, ako ste prepravili dvije-tri linije koda...[/quote]
Pitala sam profesora kako to funkcionira, rekao je da se taj "usmeni" odrzava na kraju i to samo ako ti ti bodovi koje bi dobio/dobila tim ispravkom fale za visu ocjenu. A kako to izgleda, kolko sam ja shvatila, dodes k njemu, kompajliras, on to malo pogleda i postavi ti par pitanja vezana uz kod.
la mer (napisa): | Zna li itko išta o tome kada će se i kako kod profesora ispravljati zadaće?
Ono, ako ste prepravili dvije-tri linije koda... |
Pitala sam profesora kako to funkcionira, rekao je da se taj "usmeni" odrzava na kraju i to samo ako ti ti bodovi koje bi dobio/dobila tim ispravkom fale za visu ocjenu. A kako to izgleda, kolko sam ja shvatila, dodes k njemu, kompajliras, on to malo pogleda i postavi ti par pitanja vezana uz kod.
|
|
[Vrh] |
|
pecina Forumaš(ica)
Pridružen/a: 19. 01. 2005. (14:15:23) Postovi: (157)16
Spol:
Lokacija: Happily traveling through space since 1986!
|
|
[Vrh] |
|
hendrix Forumaš(ica)
Pridružen/a: 03. 09. 2012. (15:59:06) Postovi: (92)16
|
|
[Vrh] |
|
|