zaawansowane użycie konstruktora

Odpowiedz Nowy wątek
2015-02-13 16:46
anonymous23456
0
class eq {
int a, b;
bool sign;
};

eq test = -18/17;

Czy w jakiś sposób mogę w w klasie w tym przykładzie otrzymać a = 18, b = 17, sign = 0? Wydaję mi się, że wykonane będą to działania całkowite i dostane

eq test = -1;

równoważne z

eq test (-1);

Chciałbym stworzyć klase do obsługi liczb wymiernych i zastanawiam się, jak mają działać konstruktory i konwersje. Wywołania typu:

eq test ("-18/17");
eq test (18, 17, '-');

są mało naturalne.

Pozostało 580 znaków

2015-02-13 16:56
0

Wystarczą licznik i mianownik. Znak idzie razem z którymś z nich. Popatrz sobie na std::ratio.

Pozostało 580 znaków

2015-02-13 17:06
anonymous23456
0

Gdyby znak szedł z którejś z liczby, to mógłbym przechowywać mniejsze wartości, dlatego sądze, że lepszym pomysłem będzie trzymanie znaku osobno. Chyba będę przekazywał to jednak jako string.

trzymanie liczb jako string rzadko bywa dobrym pomysłem - twonek 2015-02-13 17:18

Pozostało 580 znaków

2015-02-13 17:35
anonymous23456
0

@twonek : chce w ten sposób jedynie konstruować obiekty i dokonywać konwersji opcjonalnie.

Pozostało 580 znaków

2015-02-13 17:42
0

Dla mnie to:

eq test(18, 17, false);

oznacza mniej roboty i problemów niż

eq test("-18/17");
  • napisanie funkcji konwertującej.

Pozostało 580 znaków

2015-02-13 17:55
0

Ja bym to raczej widział jako:

// powinno dać ten sam ułamek
eq test (18, 17, -1);
eq test (-18, 17);
eq test (18, -17);
eq test (18, -17, 0);
eq test (18, -17, 1);

Szacuje się, że w Polsce brakuje 50 tys. programistów
edytowany 1x, ostatnio: vpiotr, 2015-02-13 17:56

Pozostało 580 znaków

2015-02-13 18:24
anonymous23456
0

Skoro już dwie osoby tak mówią..
Mam funkcje składową reduce(), która "skraca ułamek". Właściwie rzecz biorąc jego wartość się nie zmienia, dlatego chcę, żeby możliwe było jej wywołanie dla wartości zarówno stałych, jak i nie. Rozwiązaniem jest jedynie mutable?

Pozostało 580 znaków

2015-02-14 14:40
crn
0

Nie wiem do czego to Ci potrzebne, ale jeżeli do czegoś innego niż cele edukacyjno/naukowe istnieje coś takiego jak boost rational.
Pozdrawiam

po co sięgać po boosta skoro jest std::ratio - twonek 2015-02-14 17:23
np. w mojej obecnej pracy, mojej poprzedniej pracy i u większości moich znamoych programistów c++, kompilatory nie obsługują c++11 :) Stąd funkcjonalność c++ 11 jest brana z boost'a :) - crn 2015-02-26 21:25

Pozostało 580 znaków

2015-02-14 16:51
0

Po co ci pole sign?

Pozostało 580 znaków

2015-02-26 21:49
0

Aj tam struktury, pttpf

#include <iostream>
#include <tuple>
using namespace std;

constexpr auto calc(auto a, auto b, auto op){
    return op == '+'? a+b:
           op == '-'? a-b:
           op == '*'? a*b:
           op == '/'? a/b:
                     a;
};

int main() {
    int a, b, c;
    tie(a, b, c) = make_tuple(-18, 17, '*');
    cout << calc(a, b, c);
    return 0;
}
edytowany 3x, ostatnio: spartanPAGE, 2015-02-26 21:56
Ale po co ta krotka? :-o - Endrju 2015-02-26 22:28
Pythonowo :D - msm 2015-02-26 22:32
@Endrju do zorganizowania tego w całość - imo lepsze od tak wybitnej struktury prezentowanej przez op - spartanPAGE 2015-02-26 22:34

Pozostało 580 znaków

2015-02-26 22:28
0
anonymous23456 napisał(a):

Gdyby znak szedł z którejś z liczby, to mógłbym przechowywać mniejsze wartości, dlatego sądze, że lepszym pomysłem będzie trzymanie znaku osobno. Chyba będę przekazywał to jednak jako string.

Skoro używasz typu int, a nie unsigned int to i tak możesz przechowywac mniejsze liczby.


Ogólnie na prace domowe mam stawki zaporowe. Czasem coś o programowaniu znajdzie się na mojej stronie

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0