• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciazanie operatora porownania

Object Storage Arubacloud
0 głosów
1,397 wizyt
pytanie zadane 6 marca 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)

Witam mam taki kod: nie wiem co robie zle pomoglby mi ktos?

#include <iostream>

using namespace std;
class Liczba
{
    int wartosc;
public:
    Liczba(int _wartosc)
    {
        wartosc = _wartosc;
    }
    bool Liczba operator==(Liczba& liczb, Liczba& liczb2)
    {
        if(liczb.wartosc==liczb2.wartosc)
        return true;
    }
};
int main()
{
    Liczba l1(50);
    Liczba l2(25);
    l1 = l2;
    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 6 marca 2016 przez niezalogowany
Jaki jest log błędu?
komentarz 6 marca 2016 przez Ziuziek Mądrala (5,140 p.)
||=== Build: Debug in przeciazanie operatora przyrownania (compiler: GNU GCC Compiler) ===|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: expected ';' at end of member declaration|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: 'Liczba' is not a type|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: 'Liczba' is not a type|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: ISO C++ forbids declaration of 'operator==' with no type [-fpermissive]|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: 'int Liczba::operator==(int&, int&)' must take exactly one argument|
D:\przeciazanie operatora przyrownania\main.cpp|12|error: field 'bool Liczba::Liczba' with same name as class [-fpermissive]|
||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

 

0 głosów
odpowiedź 6 marca 2016 przez adrian17 Ekspert (345,160 p.)

bool Liczba operator==

Zabierz "Liczba", nie ma w tym miejscu żadnego sensu.

0 głosów
odpowiedź 6 marca 2016 przez Ziuziek Mądrala (5,140 p.)

Zrobilem cos takiego tylko jak zrobic zeby zwracala wartosc typu bool? bo narazie nic nie zwraca, i jak wykorzystac to w porownywaniu?:

#include <iostream>

using namespace std;
class Liczba
{
    int wartosc;
public:
    Liczba(int _wartosc)
    {
        wartosc = _wartosc;
    }
    bool operator==(const Liczba& Liczb)
    {
        if(Liczb.wartosc==5)
            return true;

    }
};
int main()
{
    Liczba l1(5);
    Liczba l2(5);
    l1==l2;


    return 0;
}

 

komentarz 6 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)

Zrób proste if... else, w którym porównasz ze sobą 2 obiekty. Używasz takiego operatora, jak przy zwykłym porównywaniu dwóch zmiennych int, float, czy cokolwiek innego.
Co do przeciążenia, to w ciele funkcji brakuje drugiego obiektu, żeby porównanie dwóch obiektów miało sens.

komentarz 6 marca 2016 przez Ziuziek Mądrala (5,140 p.)
Tylko nie da sie jesli:

D:\przeciazanie operatora przyrownania\main.cpp|12|error: 'bool Liczba::operator==(const Liczba&, const Liczba&)' must take exactly one argument|
komentarz 6 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)

Specjalnie napisałem w ciele funkcji (przeciążenia) bo definicja była w porządku. Obiekt klasy Liczba jako argument (pierwszy obiekt). Drugim obiektem jest także obiekt klasy Liczba, z racji, że operator == należy do tej klasy. Ciężko to wytłumaczyć, lepiej na kodzie będzie widać.
 

    bool operator==(const Liczba& Liczb)
    {
        if(wartosc==Liczb.wartosc)
            return true;
         return false;
    }

 

komentarz 6 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)

Przykład użycia przeciążonego operatora:
 

int main()

{

    Liczba l1(5);

    Liczba l2(5);

    if (l1==l2)

       cout<<"l1 equal l2"<<endl;

   cout<<"l1 not equal l2"<<endl;

    return 0;

}

 

komentarz 6 marca 2016 przez Ziuziek Mądrala (5,140 p.)

Tylko wtedy nie wypisuje, a co jesli zrobie tak:

#include <iostream>

using namespace std;
class Liczba
{
    int wartosc;
public:
    Liczba(int _wartosc)
    {
        wartosc = _wartosc;
    }
    bool operator==(const Liczba& Liczb)
    {
        if(wartosc==Liczb.wartosc)
            cout << "true";
            else
                cout << "false";
    }
};
int main()
{
    Liczba l1(5);

    Liczba l2(6);

    l1==l2;



    return 0;
}

Ogolnie nie mozna dawac couta w tej funkcji ?

komentarz 6 marca 2016 przez Krawiec91 Pasjonat (19,600 p.)
Jak kompilator nie podnosi alarmu, to można.;)  Kod jest krótki, więc nie robi to praktycznie żadnej różnicy, czy wypiszesz ten tekst metodą klasy czy po prostu już w main().
Ja raczej się tego trzymam, że funkcja ma robić to do czego jest stworzona i niczego więcej.;)  Tak jak ze starymi klasycznymi komórkami.;)

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
pytanie zadane 24 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
2 odpowiedzi 149 wizyt
pytanie zadane 14 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)
0 głosów
1 odpowiedź 542 wizyt
pytanie zadane 13 lutego 2016 w C i C++ przez Ziuziek Mądrala (5,140 p.)

92,632 zapytań

141,502 odpowiedzi

319,882 komentarzy

62,015 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...