Лабораторная работа 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.