Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Klasa TKwota operator *= , = , > , > =

Ostatnio zmodyfikowano 2012-12-17 20:42
Autor Wiadomość
alek44
Temat założony przez niniejszego użytkownika
Klasa TKwota operator *= , = , > , > =
» 2012-12-17 18:25:46
Witam mam problem z pewną Klasą. Polecenie jest takie:
Zdefiniuj klasę TKwota, z polami prywatnymi zlote i grosze (liczby całkowite , grosze z zakresu 0,...,99).
Dla obiektów Klasy powinny być możliwe następujące operacje:
- ustawienie pól klasy na podstawie parametrów,
- Konstrukcja obiektu klasy na podstawie parametrów (domyślna kwota o wartości 0 ),
- dodawanie kwot (przeciążyć operatory + , +=),
- mnożenie kwoty przez nie ujemną liczbę rzeczywistą(przeciążyć operatory * , *=),
- przypisywanie jednej kwoty do drugiej (przeciążyć operator =),
- porównywanie kwot(przeciążyć operatory == , > , >=),
- wczytywanie i wyświetlanie (>> , << ).

Mam problem taki  :
1 - nie wiem czy operatory przeciążania dobrze napisałem głównie chodzi mi o = , > , >= , następnie czy operator *= który jest za komentowany czy jest tez poprawnie napisany , a jak nie to prosze o poprawienie.
2 - Przykłady jak z nich skorzystać w main() , bo działa mi i wiem jak skorzystać z == , += , +.
 
C/C++
#include<iostream>
#include<cmath>
using namespace std;
class TKwota
{
private:
    int zlote;
    int grosze;
   
public:
    TKwota( int, int );
    void ustaw( int, int );
    TKwota & operator =( TKwota & );
    TKwota operator +( TKwota & w );
    TKwota operator *( double w );
    TKwota & operator +=( const TKwota & );
    TKwota & operator *=( const TKwota & );
    bool operator ==( TKwota & w );
    bool operator >=( TKwota & w );
    bool operator >( TKwota & w );
    friend ostream & operator <<( ostream &, TKwota w );
    friend istream & operator >>( istream &, TKwota w );
   
};
TKwota::TKwota( int zl = 0, int gr = 0 )
{
    //zlote = zl;
    // grosze = gr;
    ustaw( zl, gr );
}
void TKwota::ustaw( int zl, int gr )
{
    int rob;
    rob = gr / 100;
    grosze = gr % 100;
    zl += rob;
    zlote = zl;
   
}
bool TKwota::operator >( TKwota & w )
{
    if( w.zlote > zlote && w.grosze > grosze )
         return true;
   
    else
         return false;
   
}
bool TKwota::operator >=( TKwota & w )
{
    if( w.zlote >= zlote && w.grosze >= grosze )
         return true;
   
    else
         return false;
   
}
bool TKwota::operator ==( TKwota & w )
{
    if(( w.zlote == zlote ) &&( w.grosze == grosze ) )
         return true;
    else
         return false;
   
}

TKwota & TKwota::operator =( TKwota & w )
{
    ustaw( zlote = w.zlote, grosze = w.grosze );
    return * this;
   
}
TKwota & TKwota::operator +=( const TKwota & w )
{
    ustaw( zlote += w.zlote, grosze += w.grosze );
   
   
    return * this;
   
}
/*
TKwota & TKwota ::operator *=(const TKwota w)
{
   TKwota k;
       int totalgrosze = zlote * w * 100 + grosze * w;
        k.zlote = totalgrosze / 100;
        k.grosze = totalgrosze % 100;

        returb *this;

} */
TKwota TKwota::operator *( double w )
{
    TKwota k;
    int totalgrosze = zlote * w * 100 + grosze * w;
    k.zlote = totalgrosze / 100;
    k.grosze = totalgrosze % 100;
    //k.ustaw(zlote *w.zlote , grosze +w.grosze);
    return k;
}

TKwota TKwota::operator +( TKwota & w )
{
    TKwota k;
    k.ustaw( zlote + w.zlote, grosze + w.grosze );
   
    return k;
}

ostream & operator <<( ostream & wyj, TKwota w )
{
    if( w.zlote > 0 )
   
         wyj << w.zlote << " Zl " << endl;
   
    if( w.grosze < 10 && w.grosze > 0 )
    {
        wyj << "0" << w.grosze << " gr  " << endl;
    }
    else if( w.grosze > 10 )
    {
        wyj << w.grosze << " gr " << endl;
    }
    else if( w.zlote == 0 && w.grosze == 0 )
    {
        wyj << "0" << endl;
    }
    w.ustaw( w.zlote, w.grosze );
    return wyj;
}
istream & operator >>( istream & wczy, TKwota w )
{
    wczy >> w.zlote;
    wczy >> w.grosze;
    return wczy;
}
int main()
{
    TKwota Kf;
    Kf.ustaw( 3, 3 );
    TKwota Kw, suma;
    Kw.ustaw( 2, 5 );
    /* przypisanie
          cout << Kf<<endl;
           Kf  == Kw;
           cout << Kf <<endl;
             */
    cout << "suma:" << endl;
    suma = Kf + Kw;
   
    cout << suma << endl;
   
    system( "pause" );
    return 0;
}
P-71307
DejaVu
» 2012-12-17 18:31:21
P-71308
kubawal
» 2012-12-17 18:32:11
1.Kod daj w [cpp]...[/cpp]
2.Podaj, jakie błędy
3.
Przy porównywaniu (operatory > , < , >= i <=) robisz tak, że najpierw porównujesz zł, a jeśli są równe to później grosze
P-71309
alek44
Temat założony przez niniejszego użytkownika
» 2012-12-17 20:34:04
Oki dzięki już wiem :)A chciałem jeszcze zapytać  czy operator *= co za komentowany  jest poprawnie zapisany ??
P-71338
DejaVu
» 2012-12-17 20:42:59
Operator *= przeciąża się tak samo jak operator +=. Na pierwszy rzut oka to brakuje symbolu referencji w argumencie.
P-71344
« 1 »
  Strona 1 z 1