0 / 0 / 0
Регистрация: 15.02.2014
Сообщений: 24
1

Конструктор копирования для односвязного списка

29.10.2021, 00:54. Показов 825. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не выполняется кнструктор копирования, в строке temp2=temp копирование то происходоит, но на один адрес, а в конструкторе, если правильно, описал копирование с динамическим выделением памяти.

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
#include <iostream>
#include <ostream>
using namespace std;
 
class Node
{
public:
    int data;
    Node* next=nullptr;
};
 
class List
{
public:
    List();
    List(const List& r);
    ~List();
    void AddLast(int data);
    int GetSize() { return Size; }
    int& operator[](const int index);
private:
 
    int Size;
    Node *head;
};
 
List::List()
{ 
    cout << "Сработал конструктор\n";
    Size = 0;
    head = nullptr;
}
 
List::List(const List& r) :Size(0), head(nullptr)
{
    cout << "Сработал конструктор копирования";
    for (auto *p = r.head; p; p=p->next)
    {
        AddLast(p->data);
    }
}
 
List::~List()
{
    while (Size) {
        Node* temp = head;
        head = head->next;
        delete temp;
        Size--;
    }
    cout << "Сработал деструктор";
}
 
void List::AddLast(int data)
{
    if (head==nullptr)
    {
        head = new Node;
        head->data = data;
 
 
    }
    else
    {
        Node *cur = this->head;
 
        while (cur->next!= nullptr)
        {
            cur = cur->next;
        }
        cur->next = new Node;
        cur->next->data = data;
    }
    Size++;
}
 
int& List::operator[](const int index)
{
    int counter = 0;
    Node* cur = this->head;
    while (cur != nullptr)
    {
        if (counter == index)
        {
            return cur->data;
        }
        cur = cur->next;
        counter++;
    }
}
 
int main()
{
    setlocale(LC_ALL, "ru");
    List temp, temp2;
    int numCount;
    cout << "Укажите длину списка\n";
    cin >> numCount;
    for (int i = 0; i < numCount; i++)
    {
        temp.AddLast(rand()%10);
    }
 
    for (int i = 0; i < temp.GetSize(); i++)
    {
        cout << temp[i] << endl;
     }
    cout << endl;
    temp2 = temp;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2021, 00:54
Ответы с готовыми решениями:

Конструктор копирования для односвязного списка
Запутался уже, подскажите пожалуйста что я делаю не так в конструкторе копирования. файл list.h...

Копирующий конструктор для односвязного списка
Здарова ребята.Написал свой класс односвязного списка, осталась только дописать копирующий...

Написать копирующий конструктор для односвязного динамического списка
Помогите пожалуйста написать копирующий конструктор для этого класса #include&lt;iostream&gt; using...

Реализация односвязного списка (конструктор)
Доброго времени суток. Вот реализую односвязный список, застрял на конструкторе который принимает...

Управление не переходит в конструктор односвязного списка
В коде ниже представлена реализация односвязного списка.Нам дали только прототипы функций,написать...

4
4063 / 3317 / 924
Регистрация: 25.03.2012
Сообщений: 12,485
Записей в блоге: 1
29.10.2021, 01:15 2
в строке temp2=temp не должен выполняться конструктор копирования.
Там выполняется оператор присвоения.
1
0 / 0 / 0
Регистрация: 15.02.2014
Сообщений: 24
29.10.2021, 11:26  [ТС] 3
Как тогда вызвать конструктор копирования?
0
2273 / 1764 / 741
Регистрация: 27.07.2012
Сообщений: 5,241
29.10.2021, 11:28 4
Цитата Сообщение от Banki00 Посмотреть сообщение
Как тогда вызвать конструктор копирования?
C++
1
2
3
List temp;
// ...
List temp2(temp);
0
0 / 0 / 0
Регистрация: 15.02.2014
Сообщений: 24
29.10.2021, 12:45  [ТС] 5
Пробовал
Ошибка C2374 temp2: переопределение; множественная инициализация ListCPP

UPD: И правда двойная инициализация
в начале main temp2 определил, а надо было удалить
0
29.10.2021, 12:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2021, 12:45
Помогаю со студенческими работами здесь

Конструктор-копирования связного списка
Подскажите,как реализовать конструктор копирования для этого списка class part { public:...

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

Конструктор копирования для массивов
Имеется класс поля которого - массивы типа char. Почему конструктор копирование нормально...

Конструктор копирования для шаблонного класса
Не могу написать конструктор копирования для следующего класса: template &lt;typename T, typename A =...

Конструктор копирования для бинарного дерева
Какой надо совершать обход


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru