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

[C++] Przeciążanie operatora w klasie

Ostatnio zmodyfikowano 2016-07-21 10:58
Autor Wiadomość
victordeleco2
Temat założony przez niniejszego użytkownika
[C++] Przeciążanie operatora w klasie
» 2016-07-20 17:47:44
Witam, mam problem z prostym zadaniem. Przejrzałem sporo materiałów w internecie ale w żaden sposób nie mogę tego rozwiązać. Muszę napisac operator logiczny przeciążony jednak nie mam pomysłu jak to zrobić. Pomoże ktos? Pozdrawiam

Ostatni podpunkt:
https://zapodaj.net/images​/4a8f779a94f23.png

Kod:
C/C++
#include <iostream>

using namespace std;

class TKwota {
   
private:
    unsigned int zlote;
    unsigned int grosze;
   
public:
   
    TKwota()
    {
        zlote = 0;
        grosze = 0;
    }
    TKwota( int a, int b )
    {
        if( b > 100 )
        {
            zlote = a +( b / 100 );
            grosze = a % 100;
        }
        else
        {
            zlote = a;
            grosze = b;
        }
    }
    void Wyswietl()
    {
        cout << zlote;
        cout << grosze;
    }
    void Zwieksz( int c, int d )
    {
        zlote = zlote + c;
        grosze = grosze + d;
    }
   
   
    //tutaj przeciazanie
   
};


int main()
{
   
    return 0;
}


P-150145
carlosmay
» 2016-07-20 18:10:04
Przeciążanie operatorów

Down: wieczorem coś naskrobię.
P-150146
victordeleco2
Temat założony przez niniejszego użytkownika
» 2016-07-20 18:25:00
Przeczytałem całe ale jednak dalej nie mogę sobie poradzić. Nie wiem jak napisać sam początek.

P-150147
Gibas11
» 2016-07-20 20:49:27
@carlosmay
Wyręczę Cię. ;)

@autor
C/C++
#include <iostream>

using namespace std;

class TKwota {
   
private:
    unsigned int zlote;
    unsigned int grosze;
   
public:
   
    TKwota()
    {
        zlote = 0;
        grosze = 0;
    }
    TKwota( int a, int b )
    {
        if( b > 100 )
        {
            zlote = a +( b / 100 );
            grosze = a % 100;
        }
        else
        {
            zlote = a;
            grosze = b;
        }
    }
    void Wyswietl()
    {
        cout << zlote;
        cout << grosze;
    }
    void Zwieksz( int c, int d )
    {
        zlote = zlote + c;
        grosze = grosze + d;
    }
   
    // Definicja operatora porównania przyjmującego za
    // parametr inną instancję klasy TKwota
    bool operator ==( const TKwota op )
    {
        // Return zwraca czy pola 'zlote' I pola 'grosze' są równe swoim odpowiednikom
        return( this->zlote == op.zlote && this->grosze == op.grosze );
    }
};


int main()
{
    TKwota k1( 5, 5 );
    TKwota k2( 5, 5 );
    TKwota k3( 6, 7 );
   
    std::cout << "(k1 == k2) = " <<( k1 == k2 ) << std::endl;
    std::cout << "(k1 == k3) = " <<( k1 == k3 ) << std::endl;
    std::cout << "(k2 == k3) = " <<( k2 == k3 ) << std::endl;
   
    return 0;
}
Jeśli rzeczywiście przeczytałeś tamten artykuł powinieneś załapać. ;)
P-150152
Szadziu
» 2016-07-20 23:41:00
bool operator ==( const TKwota op )

brakuje referencji i const'a

bool operator ==( const TKwota & op ) const
P-150155
Gibas11
» 2016-07-21 01:15:26
const
 rozumiem, tylko to raczej coś o czym autor wątku może nie wiedzieć więc wg mnie lepiej go nie dezorientować, ale referencja? Jak wtedy ma zadziałać taki kod?
C/C++
TKwota k( 2, 3 )
auto b = k == TKwota( 6, 7 );
P-150158
carlosmay
» 2016-07-21 01:41:18
Jak wtedy ma zadziałać taki kod?
Tworzony jest obiekt bez nazwy.

C/C++
#include <iostream>

class Cls {
    int a_;
    int b_;
public:
    Cls( int a, int b )
        : a_
    { a }, b_ { b } { }
   
    bool operator ==( const Cls & cls ) const
    {
        return( a_ == cls.a_ && b_ == cls.b_ );
    }
};

int main()
{
    Cls c1( 1, 1 );
    Cls c2( 1, 1 );
    std::cout << std::boolalpha <<( c1 == c2 ) << '\n'
    <<( c1 == Cls( 1, 1 ) ) << '\n'
    <<( c1 == Cls( 1, 2 ) ) << '\n';
}
P-150161
Elaine
» 2016-07-21 02:36:20
Operator porównania powinien być implementowany jako zwyczajna funkcja poza klasą, nie jako funkcja składowa.
P-150163
« 1 » 2
  Strona 1 z 2 Następna strona