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

Pole Bitowe - klasa

Object Storage Arubacloud
0 głosów
435 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 221 wizyt
0 głosów
1 odpowiedź 188 wizyt
pytanie zadane 21 stycznia 2018 w C i C++ przez koot Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 490 wizyt
pytanie zadane 31 października 2017 w C i C++ przez Ditrix Mądrala (5,650 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...