Szablony klasy

0

Hej,
Mam do napisania pewien program, wykorzystujący szablony klas, dotyczy on obiektów reprezetujacy dzialania modulo, zn. ze dla takiego wywolania:

Modulo<5>x(7); ----> obiekt ten powinien rowna sie 2, bo 7mod5 = 2;

tak wyglada fragment mojej klasy:

template<unsigned p>
class Modulo
{
private:
    int x;
    public:
        Modulo(int x):x(x){
        x = x % (int)p;
        // p = x;
        };
        //Modulo& operator=(int x){return Modulo<x>(0);};
};

dla jednego z testow jakie mamy podane x==2, powinno dac true;
i wasnie tu mam problem tam gdzie zakomentowalem chcialem podstwic x czyli wyliczona wartosc modulo do p tak aby ten obiekt wlasnie reprezentowal wynik i faktycznie byl rowny dwa jedenak takiego przepisanie nie moge oczywiscie zrobic bezposrednio probuje jakos przeciazyc operator=(int x) ale tak niestety tez sie nie da z rzutowaniem na unsigned tez sie nie kompiluje ;< a mamy wlasnie ograniczenie ze parametry szablonow klasy musze byc typu unsigned :) Mam nadzieje ze w miare jasny sposob przedstawilem moj problem ;)

2

Wpadłeś w pułapkę debilnego nazywania wszystkiego jedną nazwą x:

template<unsigned mod> class Modulo
  {
   private:
   unsigned value;
   public:
   Modulo(unsigned value):value(value%mod) {}
   Modulo &operator=(unsigned newvalue){ value=newvalue; return *this; }
   friend bool operator==(const Modulo &a,const Modulo &b) { return (a.value==b.value); }
  };
0

Dzieki ;) tylko nie mam wyroznionego tego operatora== w zadaniu tylko operator konwertujacy do inta :) i konstruktor Modulo(int) i operator=(int)

1

nie baw się z int'ami ponieważ wartość (-12)%5 - jest sprzętowo zależna.

0

ale mam wlasnie tak zdefiniowane zadanie ze mam okreslone jak bedzie wygladal wynik dla tego dzialania i chyba jednak musze cos pokombinowac z tymi intami ...

0

unsigned to też int tylko bez znaku.

0

wiem, tylko mam taki test Modulo<-9>x(5), to musze to tez uwzglednic.

0

No to autor zadania albo nie zna języka C/C++ albo zna tylko jeden słuszny system operacyjny.

0

Czyli nie mam wyjscia musze sie bawic z tymi intami?

5

@_13th_Dragon: W C++11 operator % jest już całkowicie zdefiniowany. a % b będzie ujemne, jeżeli a będzie ujemne. W innym przypadku wynik będzie dodatni. Tak samo jest w C99. Przed tymi standardami znak podczas operowania na liczbach ujemnych faktycznie był zdefiniowany przez implementację.

Tutaj można poczytać o tym więcej: http://en.wikipedia.org/wiki/Modulo_operation Chociaż standard C++ nie używa słowa "modulo" a po prostu "reszta z dzielenia".

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