Reklama
Pokazuje wyniki od 1 do 8 z 8

Temat: [C++] Przeciążenie operatora + problem.

  1. #1

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny [C++] Przeciążenie operatora + problem.

    Witam,
    Mam problem bo muszę napisac w C++ klasę liczb wymiernych, i wszystko pięknie tylko że nie działa mi przeciążenie operatora+. Dla ułatwienia na razie uprościłem kod żeby dodawał do siebie stopnie mianowników 2 funkcji wymiernych. Dla wartości 1+1 daje wynik 10679817 (około.) xD także coś jest nie tak..

    Kod:
    int rational::operator+(const rational& B)
    { 
    int a=0;
    int b=0;
    if (B.stm+stl > B.stl+stm) {a=B.stm+stl;} else {a=B.stl+stm;}
    b = B.stm + stm;
        return b;
    }
    I wogóle nie rozumiem samej teorii dlaczego przeciazenie operatora + ma być jednoargumentowe..? jak robie dwuargumentowe to kompilator wywala błąd że może mieć tylko zero albo jeden argument. Troche to dla mnie nielogiczne.

  2. #2
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    Operator jest wykonywny na obiekcie klasy rational, to jest ta pierwsza wartosc, a po drugiej stronie masz argument. OOP tak ma, przejście nie zawsze jest bezbolesne. w kod nie zerkne, bo na telefonie jestem
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  3. Reklama
  4. #3

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    No ja mam tak że mam 2 obiekty rational A i B, każdy z nich ma w sobie zmienną stm (stopien mianownika). I chcę zapisac sumę tych stopni w nowej zmiennej int c.
    Dlaczego nie działa: c = stm + B.stm? B.stm = 1 to wiadomo jest ok, ale dla drugiego argumentu (samo stm) daje jakas liczbe z kosmosu jakby nie wiedzial o co chodzi.

  5. #4
    Avatar Ewande
    Data rejestracji
    2006
    Położenie
    Wrocław
    Posty
    367
    Siła reputacji
    18

    Domyślny

    Musisz mieć błąd w innej części programu, bo nie widzę powodu, by miało tu zwracać coś dziwnego.
    Co do przeciążania operatorów, to są dwa sposoby, które podałem poniżej.
    Mój przykład:

    main.cpp
    Kod:
    #include <iostream>
    
    using std::cout;
    
    
    class Rational
    {
    public:
        Rational(int iNum = 0, int iDenom = 1) : i_num(iNum), i_denom(iDenom) {}
    
    
        int operator+(const Rational& other) { return i_denom + other.i_denom; }
    
    
        friend int operator+(const Rational& fst, const Rational& snd) { return fst.i_denom + snd.i_denom; }
    
    
    private:
        int i_num;
        int i_denom;
    };
    
    
    int main()
    {
        Rational a(5, 12), b(10, 20);
        cout << a + b;
        getchar();
    }
    Ostatnio zmieniony przez Ewande : 29-03-2014, 11:27

  6. #5
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    dla absolutnej pewności polecam do odwolywania się do własnych ... zapomnialem słowa, powiedzmy składników wskaźnikiem na siebie this, nie wiem, czy pomoże, ale jest bardziej jednoznacznie
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  7. #6

    Data rejestracji
    2009
    Posty
    105
    Siła reputacji
    15

    Domyślny

    Dobra ruszyłem się dosyć dużo naprzód. mam już odejmowanie, dodawanie, mnozenie, i rational*double.
    Teraz mam problem taki, że oprócz mnożenia rational*double mam też zrobić double*rational. Wiem że to głupie pytanie ale jak to zrobić?
    Tak wygląda rational*double, ale co w tym zmienić aby mnożenie było przemienne?
    Kod:
    rational rational::operator*(const double& B) const{
    	rational sum(stl,stm);
    	for(int i=0;i<51;i++){sum.licznik[i]=licznik[i]*B;}
    	for(int i=0;i<51;i++){sum.mianownik[i]=mianownik[i];}
    	return sum;
    }

  8. #7
    Avatar zakius
    Data rejestracji
    2008
    Położenie
    The Internets
    Wiek
    33
    Posty
    11,075
    Siła reputacji
    24

    Domyślny

    przeciąż op * doubla, nie wiem jeszcze jak co prawda, ale może się udać :D
    ewentualnie zrób nową klasę z doublem :f

    spróbuj operator*(double, rational) czy coś?
    bo double::operator* raczej nie
    Ostatnio zmieniony przez zakius : 29-03-2014, 17:58
    Problem z komputerem? Instrukcja diagnostyczna
    Cytuj Vegeta napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Baby maja wymagania jak windows vista, takze nigdy nie wiesz.
    Cytuj Dzzej napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Moje posty to esencja głupoty.
    "Don't worry, I'm just a pervert"

  9. #8
    Avatar Ewande
    Data rejestracji
    2006
    Położenie
    Wrocław
    Posty
    367
    Siła reputacji
    18

    Domyślny

    Użyj sposobu drugiego, który podałem (z funkcją zaprzyjaźnioną). Tam możesz przeciążyć zarówno double*rational, jak i rational*double.

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Jakiego operatora wybrac?
    Przez Aver w dziale Urządzenia mobilne
    Odpowiedzi: 9
    Ostatni post: 31-01-2023, 19:49
  2. zmiana operatora android
    Przez Gayaku w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 7
    Ostatni post: 17-03-2022, 14:50
  3. Zmiana operatora
    Przez Avillon w dziale Urządzenia mobilne
    Odpowiedzi: 9
    Ostatni post: 11-06-2018, 11:54
  4. Telefony od operatora
    Przez Xeanix w dziale Urządzenia mobilne
    Odpowiedzi: 9
    Ostatni post: 28-11-2017, 17:28
  5. Jak ustawić na stałe operatora?
    Przez Argoson w dziale Urządzenia mobilne
    Odpowiedzi: 0
    Ostatni post: 19-11-2014, 19:34

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •