Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109

Проблема с перегруженным оператором +

27.03.2022, 20:31. Показов 398. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста пожалуйста почему программа падает в конце, через отладчик сидел долго смотрел но все равно не понял, видимо где-то деструктор удаляет дважды.

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
111
112
113
114
class Set_s
{
private:
 
    int* elements; 
    int size;
 
    void remove()
    {
        if (elements != nullptr)
        {
            delete[] elements;
            size = NULL;
        }
    }
 
    friend  Set_s operator+(int const a, Set_s b);
    friend  Set_s operator+(Set_s b, int const a);
 
    friend Set_s operator-(Set_s b , int const a);
 
public:
 
    Set_s(int* a, int const size) : size{size}
    {
        elements = new int[size];
 
        for (int i = 0; i < size; i++)
        {
            elements[i] = a[i];
        }
    }
 
    Set_s(int const El) : elements{ new int[size] }, size{ size++ } // конст с параметр
    {
        for (int i = 0; i < size; i++)
        {
            elements[i] = El;
        }
    }
    Set_s() : elements{ nullptr }, size{ 0 } // поумолчанию
    {}
    Set_s(const Set_s& S) : elements{ new int[size] }, size{ S.size }
    {
        for (int i = 0; i < size; i++)
        {
            elements[i] = S.elements[i];
        }
    }
    Set_s(const std::initializer_list <int>& list) : Set_s(list.size())
    {
        size = list.size();
        int i = 0;
        for (auto& element : list)
        {
            elements[i] = element;
            i++;
        }
 
    }
    ~Set_s()
    {
 
        remove();
 
    }
 
 
 
 Set_s& operator= (const Set_s& a)
 {
     if (this == &a)
     {
         return *this;
     }
 
     remove();
 
     size = a.size;
     elements = new int[size];
     for (int i = 0; i < size; i++)
     {
         elements[i] = a.elements[i];
     }
    
     return *this;
 
 }
};
 
Set_s operator+(Set_s b, int const a)
{
    for (int i = 0; i < b.size; i++)
    {
        if (b.elements[i] != a)
        {
 
        }
        else
        {
            return NULL;
        }
    }
 
        int SizeTemp = ++b.size;
        int* ac = new int[SizeTemp];
        for (int i = 0; i < SizeTemp-1; i++)
        {
            ac[i] = b.elements[i];
        }
        ac[SizeTemp] = a;
        Set_s c(ac, SizeTemp);
    return c;
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.03.2022, 20:31
Ответы с готовыми решениями:

Класс с перегруженным оператором присваивания
Добрый день, задали в университете написать класс с перегрузкой оператора присваивания, с использованием динамического массива. Я только...

Как исправить ошибку с перегруженным оператором
Добрый вечер! суть задания: Необходимо реализовать класс, который умеет хранить данные произвольных типов (int, char, любой другой объект...

Указатель на объект с перегруженным оператором вывода(с наследованием)
Есть два класса: строка(базовый) и комплексное число(производный). В базовом классе есть поле stri (указатель на char). В производном...

3
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
27.03.2022, 21:12
Цитата Сообщение от Xpystum Посмотреть сообщение
видимо где-то деструктор удаляет дважды.
Распространенные ошибки
0
2 / 2 / 0
Регистрация: 05.12.2018
Сообщений: 109
27.03.2022, 21:27  [ТС]
Не знал, было полезно) Но я написал и конструктор копирование и конструктор присваивание и деструктор. но все равно падает (забыл дописать main в код)

Добавлено через 46 секунд
C++
1
2
3
4
5
6
7
8
int main()
{
    std::cout << std::endl;
 
    Set_s с{ 1,2 };
    Set_s k = с + 3;
    
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
27.03.2022, 21:49
Цитата Сообщение от Xpystum Посмотреть сообщение
C++
1
    Set_s(int const El) : elements{ new int[size] }, size{ size++ } // конст с параметр
C++
1
 Set_s(const Set_s& S) : elements{ new int[size] }, size{ S.size }
Что это за странное использование size? Чему тут равно size?

Цитата Сообщение от Xpystum Посмотреть сообщение
size = NULL;
Что это? Почему целочисленной переменной присваивается значение NULL?

Цитата Сообщение от Xpystum Посмотреть сообщение
C++
1
2
3
Set_s(const std::initializer_list <int>& list) : Set_s(list.size())
    {
        size = list.size();
Зачем здесь делается size = list.size() если это уже по идее сделал конструктор Set_s(list.size())?

Цитата Сообщение от Xpystum Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
Set_s operator+(Set_s b, int const a)
{
    for (int i = 0; i < b.size; i++)
    {
        if (b.elements[i] != a)
        {
 
        }
        else
        {
            return NULL;
        }
    }
Что значит return NULL здесь? Что это должно сделать?

Цитата Сообщение от Xpystum Посмотреть сообщение
C++
1
2
3
        int* ac = new int[SizeTemp];
        ....
        ac[SizeTemp] = a;
Но это вылет за пределы массива.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.03.2022, 21:49
Помогаю со студенческими работами здесь

Как работает ссылка с объектами, классами и перегруженным оператором []
Я тут решил поиграться с кодом и понял что совершенно не догоняю как работает ссылка &amp; Есть код нормально работающий: #include...

Как вывести переменную-член указатель перегруженным оператором вывода?
оператор вывода в данном случае выводит адрес по которому располагается значение, а не само значение. Подскажите как доработать оператор...

Почему дружественная функция с перегруженным оператором << не имеет доступа к данным класса?
В заголовочном файле &quot;klass.h&quot; есть класс: class klass { int x; public: klass(); ~klass(); void show(); friend void...

В чем разница между перегруженным оператором "=" и конструктором копирования?
Так в чем же разница? Единственное что нашел в гугле, что нельзя использовать &quot;=&quot; для не инициализированных объектов. Как я...

Проблема с оператором if
У меня есть програма для банка. Проблема в выполнении первого кейса. Точнее одного из ифов. Задача кейса следующаа: клиент ищет счет по...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru