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

Pole Bitowe - klasa

VPS Starter Arubacloud
0 głosów
452 wizyt
pytanie zadane 22 kwietnia 2017 w C i C++ przez Doli Nowicjusz (200 p.)
edycja 22 kwietnia 2017 przez draghan

Hej :D

Mam zdefiniować klasę reprezentującą pole bitowe o długości n (n stałe - np. podawane przez użytkownika lub sprecyzowane przez programiste) z zestawem operacji na bitach (+, -, *, +=, -= *=). Udało mi się to zrobić, ale aktualnie chciałbym wykonać do tego szablony, aby program działał dla różnych typów i tu mam mały problem, ponieważ mój main wygląda tak:
 

class Pole_Bitowe
{
    int* wsk;
    long long* pola;
    int liczba_pol;

public:
    Pole_Bitowe();
    Pole_Bitowe(int liczba, ...);

    void  podziel(int liczba, ...);
    void  ustaw_pole(int numer_pola, int wartosc);
    void  wyswietl(int numer_pola);
    Pole_Bitowe operator+(const Pole_Bitowe & t);
    Pole_Bitowe operator-(const Pole_Bitowe & t);
    Pole_Bitowe operator*(const Pole_Bitowe & t);
    Pole_Bitowe operator+=(const Pole_Bitowe & t);
    Pole_Bitowe operator-=(const Pole_Bitowe & t);
    Pole_Bitowe operator*=(const Pole_Bitowe & t);
    bool operator==(const Pole_Bitowe & t);
    bool operator!=(const Pole_Bitowe & t);
    friend ostream& operator<<(ostream &wyjscie,  Pole_Bitowe const& t);//dla pol bitowych
    friend istream& operator>> (istream &wejscie, Pole_Bitowe &ex);
    int& operator[](int el );

    ~Pole_Bitowe();
};



za bardzo nie wiem gdzie mogę pozmieniać wartości na Type aby mój program zadziałał dla szablonów. Myślę, że powinienem zmienić w wskaźnikach (int* , long long*) do których alokuję pamięć w odpowiednich funkcjach, ale pomimo moich usilnch prób program nie kompiluje sie prawidłowo.

Za wszelkie wskazówki będę wdzięczny :D

komentarz 22 kwietnia 2017 przez draghan VIP (106,230 p.)
Mógłbyś wrzucić też definicje funkcji? Zastanawiam się nad Twoją implementacją i wykorzystaniem "int* wsk;  long long* pola;".

Uwaga porządkowa: kod źródłowy wstawiamy w bloczek "code".
komentarz 22 kwietnia 2017 przez Doli Nowicjusz (200 p.)
Pole_Bitowe::Pole_Bitowe(int liczba, ...)
{
    va_list ap;
    int licz;
    va_start(ap,liczba);
    wsk = new int [liczba];
    pola = new long long [liczba];
    liczba_pol = liczba;
    for (int i=0; i<liczba;i++)
    {
        pola[i]=0;
        licz=va_arg(ap, int);
        wsk[i]=licz;
        cout<<licz<<" ";
    }
    va_end(ap);
}

Np. w kostrukturze jak wyżej

komentarz 22 kwietnia 2017 przez Doli Nowicjusz (200 p.)

W funkcjach

void Pole_Bitowe::podziel(int liczba, ...)//pierwszy parametr to ilosc argumentow w funkcji
{
    va_list ap;//tworzymy liste
    int licz;
    va_start(ap,liczba);
    wsk = new int [liczba];
    pola = new long long [liczba];
    liczba_pol = liczba;
    //cout<<liczba_pol<<endl;
    for (int i=0; i<liczba;i++)
    {
        pola[i]=0;
        licz=va_arg(ap, int);
        wsk[i]=licz;
        cout<<licz<<" ";
    }
    va_end(ap);
}

lub przeciążeniu operatorów

Pole_Bitowe Pole_Bitowe::operator+(const Pole_Bitowe & t)
{
    Pole_Bitowe sum;

    sum.wsk = new int [liczba_pol];
    sum.pola = new long long [liczba_pol];
    sum.liczba_pol = liczba_pol;
    int i;
    for(i=0;i<liczba_pol;i++)
    {
        sum.wsk[i]=wsk[i];
        sum.ustaw_pole(i,pola[i]+t.pola[i]);
    }

    return sum;
}

 

komentarz 22 kwietnia 2017 przez draghan VIP (106,230 p.)
A w jaki sposób tworzysz obiekt tej klasy, tzn. przykładowe pole bitowe?
komentarz 22 kwietnia 2017 przez Doli Nowicjusz (200 p.)

moja linijka z main:

Pole_Bitowe third(4, 10, 10, 10, 10)

w ten sposób tworzę obiekt.

Pole_Bitowe third(4, 10, 10, 10, 10);

 

komentarz 22 kwietnia 2017 przez draghan VIP (106,230 p.)

Popraw mnie, jeśli się mylę: pola bitowe mają oferować dostęp do bitów, a więc do wartości binarnych, natomiast Twoje pole 'bitowe' ma pojedyncze pole typu... long long?

komentarz 24 kwietnia 2017 przez d0n Mądrala (6,440 p.)

C++ ma mechanikę pól bitowych, można o tym znaleźć trochę w internecie

z grubsza to wygląda tak:

struct pole
{
  unsigned int nazwa_pola : ilosc_bitow_w_polu,
  nazwa_kolejnego_pola : ilosc_bitow,
  nazwa_kolejnego_pola : ilosc bitow;
}

Takie pole pozwala z nich korzystac zgodnie z istota pol, dzielimy jedna zaalokowana pamięć na części o dowolnej liczbie bitow i oszczędzamy miejsce =)

Wiem, że to trochę wymijający komentarz, ale myślę, że może się przydać

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 228 wizyt
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 21 stycznia 2018 w C i C++ przez koot Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 532 wizyt
pytanie zadane 31 października 2017 w C i C++ przez Ditrix Mądrala (5,650 p.)

92,830 zapytań

141,771 odpowiedzi

320,817 komentarzy

62,159 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

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!

...