Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Написать программу на c ++,перегрузка операторов

Addk Знаток (257), на голосовании 4 месяца назад
Напишите классы, реализующие тип данных (Множество с элементами типа char).Перегрузите для них заданные операции .Дополнительно перегрузить следующие операции:– добавление элемента в множество, «-» – удаление элемента из множества, «>» – проверка на принадлежность элемента множеству, «==» – сравнение на равенство, «!=» – сравнение на неравенство, «^» – получение множества из элементов, встречающихся либо в одном либо в другом множестве, но не встречающихся в обоих, «!*» – проверка, что множества не имеют общих элементов.
Голосование за лучший ответ
Андрей Пирогов Мудрец (14762) 5 месяцев назад
а что gpt говорит?
AddkЗнаток (257) 5 месяцев назад
Программу выдает ,но она не запускается что -то не так в коде
Андрей Пирогов Мудрец (14762) romann123, а ошибки какие, gpt может исправить ошибки
Стас Еролов [Z Отряды Путина V]Мыслитель (8993) 5 месяцев назад
по горшка дежурный
Factator Мастер (2359) 5 месяцев назад
 #include  
#include
#include

class CharSet {
private:
std::set elements;

public:
// Добавление элемента в множество
void operator+(char elem) {
elements.insert(elem);
}

// Удаление элемента из множества
void operator-(char elem) {
elements.erase(elem);
}

// Проверка на принадлежность элемента множеству
bool operator>(char elem) const {
return elements.find(elem) != elements.end();
}

// Сравнение на равенство
bool operator==(const CharSet& other) const {
return elements == other.elements;
}

// Сравнение на неравенство
bool operator!=(const CharSet& other) const {
return elements != other.elements;
}

// Получение множества из элементов, встречающихся либо в одном, либо в другом множестве, но не встречающихся в обоих
CharSet operator^(const CharSet& other) const {
CharSet result;
std::set_symmetric_difference(elements.begin(), elements.end(),
other.elements.begin(), other.elements.end(),
std::inserter(result.elements, result.elements.begin()));
return result;
}

// Проверка, что множество пустое
bool operator!() const {
return elements.empty();
}

// Проверка, что множества не имеют общих элементов
bool isDisjoint(const CharSet& other) const {
for (const auto& elem : elements) {
if (other.elements.find(elem) != other.elements.end()) {
return false;
}
}
return true;
}

// Печать множества
void print() const {
std::cout << "{ ";
for (const auto& elem : elements) {
std::cout << elem << " ";
}
std::cout << "}" << std::endl;
}
};

int main() {
CharSet set1, set2;

set1 + 'a';
set1 + 'b';
set1 + 'c';

set2 + 'b';
set2 + 'c';
set2 + 'd';

std::cout << "Set 1: ";
set1.print();

std::cout << "Set 2: ";
set2.print();

std::cout << "Set 1 contains 'a': " << (set1 > 'a') << std::endl;
std::cout << "Set 1 contains 'd': " << (set1 > 'd') << std::endl;

std::cout << "Set 1 == Set 2: " << (set1 == set2) << std::endl;
std::cout << "Set 1 != Set 2: " << (set1 != set2) << std::endl;

CharSet symDiff = set1 ^ set2;
std::cout << "Symmetric difference of Set 1 and Set 2: ";
symDiff.print();

std::cout << "Set 1 and Set 2 have no common elements: " << set1.isDisjoint(set2) << std::endl;

return 0;
}
AddkЗнаток (257) 5 месяцев назад
Выдает ошибки(((
error: declaration of ‘operator!’ as non-function
57 | bool operator!*(const CharSet& other) const {
| ^~~~~~~~
main.cpp:57:18: error: expected ‘;’ at end of member declaration
57 | bool operator!*(const CharSet& other) const {
| ^
| ;
main.cpp:57:21: error: expected unqualified-id before ‘const’
57 | bool operator!*(const CharSet& other) const {
| ^~~~~
main.cpp:57:21: error: expected ‘)’ before ‘const’
57 | bool operator!*(const CharSet& other) const {
Factator Мастер (2359) romann123, поправил, проверьте
Татьяна Просветленный (36384) 5 месяцев назад
 #include  
#include
#include

class CharSet {
private:
std::set elements;

public:
// Добавление элемента
CharSet& operator+(char elem) {
elements.insert(elem);
return *this;
}

// Удаление элемента
CharSet& operator-(char elem) {
elements.erase(elem);
return *this;
}

// Проверка на принадлежность элемента множеству
bool operator>(char elem) const {
return elements.find(elem) != elements.end();
}

// Сравнение на равенство
bool operator==(const CharSet& other) const {
return elements == other.elements;
}

// Сравнение на неравенство
bool operator!=(const CharSet& other) const {
return !(*this == other);
}

// Симметрическая разность множеств
CharSet operator^(const CharSet& other) const {
CharSet result;
std::set_symmetric_difference(elements.begin(), elements.end(), other.elements.begin(), other.elements.end(),
std::inserter(result.elements, result.elements.begin()));
return result;
}

// Проверка, что множества не имеют общих элементов (пересечение пустое)
bool operator*(const CharSet& other) const {
for (const auto& elem : elements) {
if (other > elem) {
return true;
}
}
return false;
}

// Вывод множества
friend std::ostream& operator<<(std::ostream& os, const CharSet& set) {
os << "{ ";
for (const auto& elem : set.elements) {
os << elem << " ";
}
os << "}";
return os;
}
};

int main() {
CharSet set1, set2;

set1 + 'a' + 'b' + 'c';
set2 + 'b' + 'c' + 'd';

std::cout << "Set 1: " << set1 << std::endl;
std::cout << "Set 2: " << set2 << std::endl;

set1 - 'a';
std::cout << "Set 1 after removing 'a': " << set1 << std::endl;

std::cout << "'d' in Set 1: " << (set1 > 'd') << std::endl;
std::cout << "'b' in Set 1: " << (set1 > 'b') << std::endl;

std::cout << "Set 1 == Set 2: " << (set1 == set2) << std::endl;
std::cout << "Set 1 != Set 2: " << (set1 != set2) << std::endl;

CharSet symDiff = set1 ^ set2;
std::cout << "Symmetric difference (Set 1 ^ Set 2): " << symDiff << std::endl;

std::cout << "Set 1 and Set 2 have no common elements: " << (! (set1 * set2)) << std::endl;

return 0;
}
Результат выполнения программы
AddkЗнаток (257) 5 месяцев назад
Спасибо огромное !
Похожие вопросы