Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Preopterečenje operatora

[es] :: C/C++ programiranje :: C/C++ za početnike :: Preopterečenje operatora

[ Pregleda: 2782 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

timi263057

Član broj: 45947
Poruke: 241
*.adsl.net.t-com.hr.



+1 Profil

icon Preopterečenje operatora30.10.2011. u 23:22 - pre 152 meseci
/*1. Napisati klasu Razlomak s parametrima int b, n - predstavljaju brojnik i nazivnik.
Za zadanu klasu potrebno je napisati konstruktore (podrazumijevajući, koji postavlja razlomak na 1,
te konstruktor sa dva parametra), funkciju za ispis razlomka void ispis , te funkciju za overload operatora za zbrajanje i oduzimanje.
U main funkciji kreirati dva razlomka, te ispisati na ekran njihov zbroj i razliku, koristeći funkciju za ispis i definirane operatore.*/

Ovo sam napravio ali fakat ne kužim kako i šta dalje i to me živcira.

Code:
#include<conio.h>
#include<iostream>
using namespace std;

class Razlomak{
  
  public: float b,n,aa,bb;    
  
  Razlomak () {b=1; n=1;}
  Razlomak (float x, float y) {aa=x; bb=y; }

  
  friend Razlomak operator+(Razlomak &b, Razlomak &n);
  friend Razlomak operator-(Razlomak &b, Razlomak &n);
 
   
  float ispis ()
  {
     
  }
    
};

  Razlomak operator+(Razlomak &b, Razlomak &n) {return Razlomak ( b+n );}
  //Razlomak operator-(Razlomak &b, Razlomak &n) {return Razlomak (b+n);}
  
int main()
{
    
    Razlomak b, C;
    Razlomak n(6,3);

    C=b+n;
    cout<<C;
getch();
    
    }

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Preopterečenje operatora30.10.2011. u 23:54 - pre 152 meseci
U zadatku piše da klasa treba da ima dva inta, b i n, a ne četiri floata. Konstruktor s parametrima verovatno treba da prima dva inta, a članice aa i bb ti ne trebaju. Dalje, u operatorima + i - treba da imaš malo matematike. Kako se sabiraju dva razlomka? Ovo je jednačina:

b1 / n1 + b2 / n2 = (b1 * n2 + b2 * n1) / (n1 * n2)

Rezultantni objekat treba da ima svoj b = b1 * n2 + b2 * n1, i svoj n = n1 * n2. Bilo bi zgodno i kad bi skratio brojeve tako da budu nedeljivi, ali to se trenutno ne traži. Možda će to biti zadatak za sledeći čas. Uzgred, ti operatori treba da imaju const parametre (const Razlomak &levi, const Razlomak &desni), jer ih samo čitaš, ali im ne menjaš sadržaj. Ovde bih samo napomenuo da ne valja da se "recikliraju" imena promenljivih, jer evo trenutno imaš zbunjujuću situaciju da su promenljive b i n objekti koji imaju članove b i n, to jest trebalo bi da barataš sa intovima b.b, b.n, n.b, n.n. To je vrlo zbunjujuće. Bolje je levi.b, levi.n, desni.b, desni.n.

Dalje, u zadatku kaže da funkcija ispis treba da ne vraća ništa (to jest povratna vrednost je void), ali da treba da ispiše nešto. Onom cout mesto je, dakle u funkciji ispis, a u funkciji main bi zato trebalo da stoji C.ispis(). Funkcija ispis verovatno treba da radi nešto nalik ovome: cout << b << " / " << n << endl;
 
Odgovor na temu

chaami
Goran Petrović
nezaposlen
Beograd

Član broj: 262685
Poruke: 84
77.243.20.*



+28 Profil

icon Re: Preopterečenje operatora31.10.2011. u 03:52 - pre 152 meseci
Ja pravo da vam kažem nešto i nisam viđao ovu varijantu operatora+ u friend funkciji. Kod mene se preklapanje binarnih operatora uvek radilo ovako.
Code:
class Razlomak{

  private: int b,n;

  public:
  Razlomak () {b=1; n=1;}
  Razlomak (int x, int y) {b=x; n=y; }

  Razlomak operator+(Razlomak &desni);

  void ispis ();
};

Razlomak Razlomak::operator+ (Razlomak &desni)
{
    Razlomak temp;
    temp.b=b*desni.n+n*desni.b;
    temp.n=n*desni.n;
    return temp;
}

... zanimljivo ... može i sa friend funkcijom. Znači kod tebe bi to bilo
Code:
Razlomak operator-(Razlomak &levi, Razlomak &desni)
{
    Razlomak temp;
    temp.b=levi.b*desni.n-levi.n*desni.b;
    temp.n=levi.n*desni.n;
    return temp;
}


[Ovu poruku je menjao chaami dana 31.10.2011. u 05:07 GMT+1]
 
Odgovor na temu

timi263057

Član broj: 45947
Poruke: 241
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Preopterečenje operatora31.10.2011. u 10:26 - pre 152 meseci
hvala ti, ali možeš li mi objasniti to sa "temp" ne shvaćam šta se radi tu

i kako na kraju ispisati njihov zbroj? O.o
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Preopterečenje operatora31.10.2011. u 10:41 - pre 152 meseci
Nema razloga da postoji privremena promanljiva nazvana temp, jer sve može da se reši direktno sa return:

Code:
Razlomak operator-(Razlomak &levi, Razlomak &desni)
{
    return Razlomak(levi.b * desni.n - levi.n * desni.b, levi.n * desni.n);
}

 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Preopterečenje operatora31.10.2011. u 10:43 - pre 152 meseci
Citat:
timi263057: i kako na kraju ispisati njihov zbroj? O.o


Pročitaj moj prvi odgovor. Funkcija void Razlomak::ispis() treba da ispiše b i n, a u funkciji main samo pozoveš C.ispis();
 
Odgovor na temu

timi263057

Član broj: 45947
Poruke: 241
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Preopterečenje operatora31.10.2011. u 10:55 - pre 152 meseci
aha, sad shvaćam.
kako program zna koji je levi a koji desni "n" odnosno "b"

[Ovu poruku je menjao timi263057 dana 31.10.2011. u 12:14 GMT+1]
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Preopterečenje operatora31.10.2011. u 11:37 - pre 152 meseci
Kada se u kodu napiše x + y, gde su x i y objekti klase Razlomak, onda će kompajler pozvati operator+(Razlomak&, Razlomak&) i prvom parametru će dodeliti vrednost x, a drugom parametru biće dodeljena vrednost y. O tome brine kompajler.
 
Odgovor na temu

timi263057

Član broj: 45947
Poruke: 241
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Preopterečenje operatora31.10.2011. u 12:00 - pre 151 meseci
e odlično. i samo još jedna stvar me zanima. kako korisniku omogućiti koje brojeve da unese i da se ti brojevi koriste za zbrajanje?
hvala puno, sad sam shvatio
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Preopterečenje operatora31.10.2011. u 13:40 - pre 151 meseci
Kao što postoji cout postoji i cin, i on se koristi za unos podataka. Recimo cin >> b će dodeliti broju b ono što se unese preko tastature. Da bi stvorio jedan objekat tipa Razlomak trebaju ti dva broja tipa int. Učitaj dva broja i stvori objekat (koristeći konstruktor sa parametrima).
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Preopterečenje operatora

[ Pregleda: 2782 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.