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

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

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

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

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

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


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

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

Класс для работы со структурами типа "Множество" - C++
Необходимо создать класс для работы со структурами типа &quot;Множество&quot;. Тип элемента структуры должен предоставляться параметром шаблона. ...

Реализовать класс абстрактного типа данных "Множество" - C++
Доброго вечера! Требуется помощь с задачей. Никак не могу понять, что не так. Может в указателях дело, не знаю уже... Необходимо...

Ввести класс для работы с объектом "множество целых чисел" - C++
6)Ввести класс для работы с объектом &quot;множество целых чисел&quot;.Реализовать: 1)пересечение двух множеств 2)добавление элемента во...

Класс "множество целых чисел" с операциями объединения, пересечения, дополнения - C++
Set.h using namespace std; class Set { int *nums; // множество целых чисел size_t capacity; // число ненулевых элементов...

Разработать класс "множество целых чисел" в соответствии со следующим заданием - C++
Форумчане помогите разобраться с программой, только начался С++ 1. Разработать класс &quot;множество целых чисел&quot; в соответствии со...

Создать класс "Множество строк" (нужно чтобы элементы не повторялись) - C++
Подскажите, как создать класс множество строк( нужно чтоб элементы не повторялись) ? Нужно также реализовать добавления и удаление...

Класс "Множество" и операции над ним - C++
Не хватает опыта понять ошибку Здравствуйте! Никак не получается тот же результат хотя проверял несколько раз вот само задание: ...

Класс "Множество". Не работает деструктор - C++
Задача: написать класс &quot;множество&quot;. Вот текст программы: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; #include...

Описать класс "множество" - C++
Описать класс «множество», позволяющий выполнять основные операции — добавление и удаление элемента, пересечение, объединение и разность...

Написать класс "Множество" - C++
Написать класс &quot;Множество&quot; В нем реализовать методы: конструкторы ( по умолчанию, с параметрами, копирования), деструктор, ввод с...

Класс "множество" - C++
Нужно написать класс &quot;множество&quot;, перегрузить для него операции пересечение (*), объединение (+), добавление элемента (+=). Я уже не...

Класс "Телефонная станция". Массив символов и массив строк - в чем разница? - C++
Всем привет. Не могу исправить в программе пункт корректировки. Весь проект прикрепляю к сообщению. ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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;
}
Ответ Создать тему
Опции темы

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