Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

Feww

[C++] Unia i pole bitowe - problem

Polecane posty

Witam potrzebuje pomocy w 2 małych zadaniach do szkoły. A dokładniej:

1. Zaprojektuj unię reprezentującą samolot. Zaproponuj atrybuty dla tej  klasy, pozwalające na określenie jego rozmiaru i maks. liczby pasażerów oraz prędkości. Atrybuty dla prędkości mają być chronione.
2. Zaprojektuj pole bitowe reprezentującą samolot. Zaproponuj atrybuty dla tej klasy, pozwalające na określenie jego rozmiaru i maks. liczby pasażerów oraz prędkości. Atrybuty dla prędkości mają być chronione.

Nie mam pojęcia jak to zrobić. Jeżeli ktoś mógłby mi pomóc to byłbym bardzo wdzięczny.

Link do komentarza
Udostępnij na innych stronach

union samolot
{
  int iMax_pasazerow;
  float fRozmiar;
  
  unsigned maxpas :3;  
  unsigned rozm   :4;  

  protected:
  
  unsigned predk  :4;
  
  float fPredkosc;
  
};

Może być ? Nigdy tego w praktyce nie stosowałem bo jakoś nie było mi potrzebne.

pozatym:

http://pl.wikipedia.org/wiki/Pola_bitowe

http://cpp0x.pl/kursy/Kurs-C++/Unia-w-C++/314

Link do komentarza
Udostępnij na innych stronach

Zaprojektuj unię reprezentującą samolot. Zaproponuj atrybuty dla tej klasy
To unię czy klasę? Bo w C++ to nie są tożsame pojęcia.

Wygodna struktura pola bitowego wygląda mniej więcej tak:

union Unia
{
  struct
  {
    usnigned int a : 1; //1
    usnigned int b : 2; //3
    usnigned int c : 3; //6
    usnigned int d : 4; //10
    usnigned int e : 5; //15
    usnigned int f : 6; //21
    usnigned int g : 7; //28
    usnigned int h : 4; //32
  };
  
  unsigned int raw;
};

Użycie:

Unia un;

un.a = 0x1;
un.h = 0xf;
un.raw = 0xffffffff

Pola od a do h mają podane rozmiary i są mapowane na odpowienie bity pola raw. Kompilator zajmuje się ich pakowaniem i rozpakowaniem.

Także zapisując do h 0xf, w raw robimy 0xf0000000.

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...