Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dima7147
0 / 0 / 0
Регистрация: 17.11.2011
Сообщений: 17
#1

Класс "Множество символов" - C++

08.12.2011, 12:43. Просмотров 1054. Ответов 1
Метки нет (Все метки)

Внимание! В каждом задании требуется разработать пользовательский тип (класс). Для демонстрации возможностей класса Вам необходимо написать программу, управляемую через меню (в текстовом режиме). Исходный код класса нужно оформить в виде двух файлов: заголовочного файла с объявлением класса и файла реализации.


Разработайте пользовательский тип «множество символов». Реализуйте механизм подсчета ссылок (!) для минимизации операций копирования. Для разрабатываемого типа обязательно определите:
• конструктор и деструктор;
• конструктор копирования;
• операторы << и >> для добавления и исключения элементов из множества;
• операторы & и | для пары множеств с семантикой «пересечение множеств» и «объединение множеств»;
• оператор присваивания;
• оператор сравнения ==;
• операторы < и > c семантикой принадлежности одного множества другому;
• метод для определения принадлежности символа множеству;
• метод для вывода множества в указанный поток.

Добавлено через 22 часа 3 минуты
Не могли бы вы написать код?)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2011, 12:43     Класс "Множество символов"
Посмотрите здесь:

C++ Описать класс "множество", позваляющий выполнять основные операции
Класс: Реализация через битовое поле класса "Множество" C++
C++ Ввести класс для работы с объектом "множество целых чисел"
Разработать класс "множество целых чисел" в соответствии со следующим заданием C++
Класс "Множество" и операции над ним C++
C++ Описать класс "множество" вещественных чисел, позволяющий выполнять основные операции
C++ Разработать класс "множество целых чисел из заданного диапазона"
C++ Реализовать класс абстрактного типа данных "Множество"
C++ Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс"
C++ Создать класс "Книга" с полями "название книги", "количество страниц", "год издания"
C++ Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления"
Создать класс "Множество строк" (нужно чтобы элементы не повторялись) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2917 / 1346 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.12.2011, 14:32     Класс "Множество символов" #2
Внимание! Имел я в виду "писать программу, управляемую через меню (в текстовом режиме)" и оформление "в виде двух файлов: заголовочного файла с объявлением класса и файла реализации".

Так же не ясно, что такое "подсчет ссылок" еще и для "минимизации копирования". Имеется в виду количество инстанцированных классов?

Вот класс и пример его работы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <string>
#include <iostream>
 
class SetOfChar {
 public:
  SetOfChar() {
    clear();
  }
  SetOfChar(const SetOfChar &other) {
    copyFrom(other);
  }
  SetOfChar &operator=(const SetOfChar &other) {
    if (&other != this)
      copyFrom(other);
    return *this;
  }
  SetOfChar &operator<<(unsigned char value) {
    data_[value / 8] |= 1 << (value % 8);
    return *this;
  }
  SetOfChar &operator>>(unsigned char value) {
    data_[value / 8] &= ~(1 << (value % 8));
    return *this;
  }
  bool operator[](unsigned char value) const {
    return has(value);
  }
  SetOfChar operator&(const SetOfChar &other) {
    return intercectionWith(other);
  }
  SetOfChar operator|(const SetOfChar &other) {
    return unionWith(other);
  }
  bool operator<(const SetOfChar &other) {
    return isSubsetOf(other);
  }
  bool operator>(const SetOfChar &other) {
    return other.isSubsetOf(*this);
  }
  SetOfChar intercectionWith(const SetOfChar &other) const {
    SetOfChar result;
    for (unsigned char i = 0; i < 32; ++i)
      result.data_[i] = data_[i] & other.data_[i];
    return result;
  }
  SetOfChar unionWith(const SetOfChar &other) const {
    SetOfChar result;
    for (unsigned char i = 0; i < 32; ++i)
      result.data_[i] = data_[i] | other.data_[i];
    return result;
  }
  bool isSubsetOf(const SetOfChar &other) const {
    for (unsigned char i = 0; i < 32; ++i)
      if (((data_[i] & other.data_[i]) ^ data_[i]) != 0)
        return false;
    return true;
  }
  bool operator==(const SetOfChar &other) const {
    return equalsTo(other);
  }
  bool equalsTo(const SetOfChar &other) const {
    for (unsigned char i = 0; i < 32; ++i)
      if (data_[i] != other.data_[i])
        return false;
    return true;
  }
  bool has(unsigned char value) const {
    return ((data_[value / 8] & (1 << (value % 8))) != 0);
  }
  bool isEmpty() const {
    for (size_t i = 0; i < 32; ++i)
      if (data_[i] != 0)
        return false;
    return true;
  }
  void clear() {
    for (size_t i = 0; i < 32; ++i)
      data_[i] = 0;
  }
  void copyFrom(const SetOfChar &other) {
    for (size_t i = 0; i < 32; ++i)
      data_[i] = other.data_[i];
  }
 private:
  unsigned char data_[32];
};
 
std::ostream &operator<<(std::ostream &stream, const SetOfChar &set) {
  for (unsigned char i = 0; i < 255; ++i)
    if (set[i])
      stream << static_cast<int>(i) << " ";
  return stream;
}
 
int main(int argc, char *argv[]) {
  SetOfChar a, b, c;
  a << 1 << 2 << 4 << 6;
  b << 2 << 3 << 5 << 6;
  c = (a | b);
 
  std::cout << "a: " << a << std::endl << "b: " << b << std::endl <<
    "c: " << c << std::endl;
  std::cout << "Union: " << (a | b) << std::endl;
  std::cout << "Intersection: " << (a & b) << std::endl;
  std::cout << "C includes A: " << ((c > a) ? "yes" : "no") << std::endl;
  std::cout << "C includes B: " << ((c > b) ? "yes" : "no") << std::endl;
  std::cout << "A includes B: " << ((a > b) ? "yes" : "no") << std::endl;
  std::cout << "A equals to B: " << ((a == b) ? "yes" : "no") << std::endl;
  return 0;
}
Yandex
Объявления
09.12.2011, 14:32     Класс "Множество символов"
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru