Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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


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

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

Создать класс "Вентилятор" содержащий в себе классы: "Двигатель", "Контроллер", "Пульт управления" - C++
Помогите с кодом написания задачи, не понимаю как написать классы в классе. Нужно создать класс &quot;вентилятор&quot; содержащий в себе классы:...

Создать класс "Книга" с полями "название книги", "количество страниц", "год издания" - C++
Создать класс Книга поля: название книги,количество страниц,год издания методы: вычислить сколько лет книге и количество дней прошедших...

Создать абстрактный класс "Издание" и производные классы "Книга", "Статья", "Электронный ресурс" - C++
1. Создать абстрактный класс Издание с методами, позволяющими вывести на экран информацию об издании, а также определить является ли данное...

Класс: Реализация через битовое поле класса "Множество" - C++
Реализация через битовое поле. Как сделать ввод и вывод множества и так чтобы элементы хранились в отсортированном порядке? #include...

Разработать класс "множество целых чисел из заданного диапазона" - C++
Примечание: Класс должен содержать конструктор по умолчанию, конструктор с параметрами, конструктор копирования, деструктор. Код...

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

1
lemegeton
2925 / 1354 / 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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2011, 14:32
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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