Помогите с задачей C++
Разработать класс Set (множество). Внутренним представлением класса Set является целочисленный массив элементов множества. Создать шаблон функцию сложения с целым числом, использующую аргументы различных типов, включая объекты класса Set (добавление элементов в множество с исключением дублирования элементов, путем перегрузки оператора +).
(Шаблон) Функция, определяющая второй по величине элемент массива (т.е. тот, который будет максимальным, если исключить из массива текущий максимальный.
Как исправить программу , чтоб она работала:
#include
#include
#include
template
void sum(T1 a, T2 b) {
std::cout << a + b;
}
template
T Max(const T* A, int size)
{
T max = A[0];
for (int i = 0; i < size; i++)
if (A[i] > max)
max = A[i];
return max;
}
class Set {
private:
int* elements;
int size;
public:
// Конструктор по умолчанию
Set() : elements(nullptr), size(0) {}
// Конструктор копирования
Set(const Set& other) : size(other.size) {
elements = new int[size];
std::copy(other.elements, other.elements + size, elements);
}
// Деструктор
~Set() {
delete[] elements;
}
// Перегрузка оператора +
Set operator+(const Set& other) const {
Set result = *this; // Создаем копию текущего множества
for (int i = 0; i < other.size; ++i) {
if (!result.contains(other.elements[i])) {
result.addElement(other.elements[i]);
}
}
return result;
}
// Перегрузка оператора присваивания
Set& operator=(const Set& other) {
if (this != &other) {
delete[] elements;
size = other.size;
elements = new int[size];
std::copy(other.elements, other.elements + size, elements);
}
return *this;
}
// Перегрузка оператора ==
bool operator==(const Set& other) const {
if (size != other.size) {
return false;
}
for (int i = 0; i < size; ++i) {
if (!other.contains(elements[i])) {
return false;
}
}
return true;
}
// Перегрузка оператора !=
bool operator!=(const Set& other) const {
return !(*this == other);
}
// Проверка наличия элемента в множестве
bool contains(int element) const {
for (int i = 0; i < size; ++i) {
if (elements[i] == element) {
return true;
}
}
return false;
}
// Добавление элемента в множество
void addElement(int element) {
if (!contains(element)) {
int* newElements = new int[size + 1];
std::copy(elements, elements + size, newElements);
newElements[size] = element;
delete[] elements;
elements = newElements;
++size;
}
}
// Вывод элементов множества
void display() const {
std::cout << "Элементы множества: ";
for (int i = 0; i < size; ++i) {
std::cout << elements[i] << " ";
}
std::cout << std::endl;
}
};
int main() {
setlocale(LC_ALL, "RU");
SetConsoleCP(1251);
Set set1, set2, setResult;
set1.addElement(1);
set1.addElement(2);
set1.addElement(3);
set2.addElement(3);
set2.addElement(4);
set2.addElement(5);
// Перегрузка оператора +
setResult = set1 + set2;
set1.display();
set2.display();
setResult.display();
// Перегрузка оператора ==
if (set1 == set2) {
std::cout << "Множества равны." << std::endl;
}
else {
std::cout << "Множества не равны." << std::endl;
}
// Перегрузка оператора !=
if (set1 != set2) {
std::cout << "Множества не равны." << std::endl;
}
else {
std::cout << "Множества равны." << std::endl;
}
sum(10, 25.5);
Max(*setResult, 4);
return 0;
}
Ответы
Ответ:
class Set {
int* elements = nullptr;
int size = 0;
Set() : elements(new int[10]), size(0) {}
~Set() { delete[] elements; }
// Конструктор копирования
Set(const Set&) = delete;
// Оператор присваивания
Set& operator=(const Set&) = delete;
};
template <typename T>
class Addition {
T a, b;
public:
Addition(const T& a, const T& b) : a(a), b(b) {}
};
// Перегрузка оператора + для добавления элементов множества
template <typename T1, typename T2>
class Sum {
public:
Sum(const T1& a, const T2& b) { std::cout << “(” << a << ", " << b << “)\n”; }
};
template<typename T, typename U>
void add(const T a, const U b) {
typedef typename std::common_type<T, U>::type CommonType;
std::cout << static_cast<CommonType>(a) + static_cast<CommonType>(b) << std::endl;
}
В функции main вы должны написать код, который будет выполнять поставленную задачу. Это может включать в себя создание объектов, вызов функций, обработку пользовательского ввода и многое другое. Конкретный код, который вы напишете, зависит от того, что вы пытаетесь сделать.
Например, если вы хотите просто ввести число и вывести его на экран, вы можете написать следующий код:
#include <iostream>
int main() {
int number;
std::cout << "Введите число: ";
std::cin >> number;
std::cout << number << std::endl;
return 0;
}
В этом примере программа попросит пользователя ввести число, а затем выведет это число на экран.