Битовые множества

advertisement
Лабораторная работа 3. Битовые множества
Необходимо реализовать класс битовых множеств BitSet.
Проект должен состоять их пяти файлов:
 BitSet.h — описание класса BitSet;
 BitSet.cpp — реализация методов класса BitSet;
 BitReference.h — описание класса BitReference;
 BitReference.cpp — реализация методов класса BitReference;
 Main.cpp — содержит функцию main, в которой создаются объекты и осуществляется
тестирование.
Ниже приведены фрагменты описания классов с перечислением методов, которые необходимо
реализовать.

Заголовочный файл BitSet.h:
class BitSet
{
friend class BitReference;
private:
int *a;
int an, n;
bool Get(int pos);
void Set(int pos, bool val);
public:
BitSet(int iN = 0);
BitSet(const BitSet &bitSet);
~BitSet();
void Read();
void Print();
bool operator ==(const BitSet &bitSet) const;
bool operator !=(const BitSet &bitSet) const;
BitSet
BitSet
BitSet
BitSet
BitSet
BitSet
BitSet
BitSet
BitSet
BitSet
&operator =(const BitSet &bitSet);
&operator =(int x);
&operator &=(const BitSet &bitSet);
&operator |=(const BitSet &bitSet);
&operator ^=(const BitSet &bitSet);
operator ~() const;
&operator <<=(int num);
&operator >>=(int num);
operator <<(int num) const;
operator >>(int num) const;
BitReference operator [](int pos);
int Size() const;
};
BitSet operator &(const BitSet &bitSet1, const BitSet &bitSet2);
BitSet operator |(const BitSet &bitSet1, const BitSet &bitSet2);
BitSet operator ^(const BitSet &bitSet1, const BitSet &bitSet2);
Битовое множество bitSet размера n должно храниться в динамически создаваемом массиве
a, где в каждом из элементов массива a хранятся 8*sizeof(int) бит битового множества (0 —
false, 1 — true). an — размер массива a, необходимый для хранения n бит.
 BitSet(int iN = 0) — конструктор, выделяет память под битовое множество размера
iN. Все ячейки множества инициализируются 0.
 BitSet(const BitSet &bitSet) — конструктор копирования.
 ~BitSet() — деструктор, освобождает динамически выделенную под массив a память.
 bool Get(int pos) — возвращает значение бита с индексом pos.
 void Set(int pos, bool val) — присваивает биту с индексом pos значение val.
 void Read() — перевыделяет память и читает битовое множество со стандартного
потока ввода в формате n b0 … bn-1 (bn из {0, 1}).
 void Print() — печатает битовое множество.
 bool operator ==(const BitSet &bitSet) const — оператор равенства.
 bool operator !=(const BitSet &bitSet) const — оператор неравенства.
 BitSet &operator =(const BitSet &bitSet) — оператор присваивания.
 BitSet &operator =(int x) — создает битовое множество, задаваемое двоичной
записью числа x.
 различные битовые операции
 BitReference operator [](int pos) — индексатор, возвращает BitReference,
соответствующий биту с индексом pos.
 int Size() — возвращает количество бит битового множества.

Заголовочный файл BitReference.h:
class BitReference
{
friend class BitSet;
private:
BitSet *bitSet;
int pos;
BitReference(BitSet *iBitSet, int iPos);
public:
BitReference &operator =(bool val);
BitReference &operator =(const BitReference &ref);
bool operator ~() const;
operator bool() const;
};

bool operator ~() const
— возвращает значение, противоположное задаваемому
ссылкой.

operator bool() const
— возвращает значение, задаваемое ссылкой.
Примечания:
 Предлагаемая лабораторная работа прдеставляет собой упрощенный вариант класса
bitset стандартной библиотеки шаблонов. Его релизацию можно посмотреть в
заголовочном файле bitset.
Download