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

C++ Problem z klasami

VPS Starter Arubacloud
0 głosów
218 wizyt
pytanie zadane 28 grudnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

Witam, potrzebuję w poniższym programie dopisać do klasy Ulamek operatory umożliwiające:

- zmianę znaku, operacje dodawania, odejmowania, mnożenia i dzielenia
- porównywanie dwóch ułamków
- wypisywanie ułamka na konsole / do pliku
- rzutowanie na typ double
- dostęp do licznika i mianownika za pomocą indeksowania [ ]

Niestety nie mam żadnego pomysłu, jak to poprawnie zaimplementować).

Za wszelką pomoc z góry dziękuję, oto kod:

#include <iostream>

class Ulamek {
  int licznik;
  int mianownik;

  public:
    Ulamek(int licz, int mian) {
      if (mian != 0) {
        licznik = licz;
        mianownik = mian;
        if (mianownik < 0) {
          licznik *= (-1);
          mianownik *= (-1);
        }
      } else {
        std::cout << "Mianownik nie moze byc rowny 0 !!";
        exit(0);
      }
    }

  Ulamek(const Ulamek & f1) {
    licznik = f1.licznik;
    mianownik = f1.mianownik;
  }

  int getLicznik() {
    return licznik;
  }

  int getMianownik() {
    return mianownik;
  }

  void setLicznik(int x) {
    licznik = x;

  }

  void setMianownik(int y) {
    if (y != 0) {
      mianownik = y;
    } else {
      std::cout << "0 nie moze byc w mianowniku!" << std::endl;
      exit(0);
    }
  }

  void simplify(int a, int b) {
    while (a != b)
      if (a > b) {
        a -= b;
      }
    else {
      b -= a;
    }
    licznik /= a;
    mianownik /= b;
  }

  void wypisz() {
    std::cout << "Podany ulamek to: " << licznik << "/" << mianownik << std::endl;
  }

  float toFloat() {
    float dziesietny;
    dziesietny = float(licznik) / float(mianownik);
    return dziesietny;
  }
};

int main() {
  return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 28 grudnia 2022 przez mokrowski Mędrzec (155,460 p.)
Czas przysiąść i zrobić.

https://cpp0x.pl/artykuly/Inne-artykuly/Przeciazanie-operatorow-w-C++/15

https://home.agh.edu.pl/~glowacki/UJK-docs/matwykl/O-o/_ProgObiekt_PrzeciazOperat.pdf

Myślę że teraz możesz mieć pomysły jak to poprawnie implementować.
komentarz 29 grudnia 2022 przez benny13 Obywatel (1,150 p.)
Dziękuję :) Niestety mimo przeczytania artykułów wysłanych przez Pana wciąż nie jestem w stanie zrobić np. dostępu do licznika i mianownika za pomocą indeksowania czy porównywania dwóch ułamków. Jedyne, co się udało to dodawanie i odejmowanie.
komentarz 29 grudnia 2022 przez Oscar Nałogowiec (29,290 p.)
Odejmowanie i dodawanie to najtrudniejsze - trzeba sprowadzić do wspólnego mianownika. To samo przy porównaniu. W zasadzie porównanie można zrobić przez odejmowanie i sprawdzenie znaku wyniku.

Pokaż co już napisałeś, stopniowo będzie można rozwiązywać kolejne problemy/wątpliwości.

A propos, w pierwszym przykładzie, tym na cpp0x, ktoś chyba w niektórych miejscach zapomniał dopisać const. Operatory typu '!', '+' czy '-' nie zmieniają argumentów a generują wynik jako inną zmienną (tymczasową).

I tak ogólnie - trzeba bardzo uważać czy przeciążaniu operatorów bo można stworzyć coś sprzecznego z logiką, np. operatory == i != to różne funkcję i trzeba pamętać, by dawały przeciwne wyniki.

Podobne pytania

0 głosów
2 odpowiedzi 231 wizyt
pytanie zadane 28 grudnia 2022 w C i C++ przez benny13 Obywatel (1,150 p.)
0 głosów
1 odpowiedź 154 wizyt
pytanie zadane 5 listopada 2023 w C i C++ przez Oluslolus Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 340 wizyt
pytanie zadane 18 lutego 2023 w C i C++ przez Kaduq Użytkownik (780 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...