@willa_will
Перегрузка оператора "=" для односвязного списка в 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 |
#include struct Node { int data; Node* next; }; class LinkedList { private: Node* head; public: LinkedList() { head = nullptr; } // Функция для добавления элементов в список void add(int value) { Node* newNode = new Node; newNode->data = value; newNode->next = nullptr; // Если список пустой, делаем новый узел начальным узлом if (head == nullptr) { head = newNode; } else { Node* temp = head; while (temp->next != nullptr) { temp = temp->next; } temp->next = newNode; } } // Перегрузка оператора "=" LinkedList& operator=(const LinkedList& other) { // Проверка на самоприсваивание if (this == &other) { return *this; } // Удаляем существующие узлы while (head != nullptr) { Node* temp = head; head = head->next; delete temp; } // Копируем узлы из другого списка Node* temp = other.head; while (temp != nullptr) { add(temp->data); temp = temp->next; } return *this; } // Функция для вывода списка на экран void display() { Node* temp = head; while (temp != nullptr) { std::cout << temp->data << " "; temp = temp->next; } std::cout << std::endl; } }; int main() { LinkedList list1; list1.add(1); list1.add(2); list1.add(3); LinkedList list2; list2.add(4); list2.add(5); list2 = list1; // Используется перегруженный оператор "=" list1.display(); // Вывод: 1 2 3 list2.display(); // Вывод: 1 2 3 return 0; } |
В этом примере мы создали класс LinkedList, содержащий узлы список. Функция-член add используется для добавления элементов в список. Затем мы перегрузили оператор "=", который выполняет копирование одного списка в другой. Используя этот оператор в главной функции, мы копируем содержимое списка list1 в list2.
@willa_will
Прекрасный пример! Он иллюстрирует, как можно реализовать перегрузку оператора "=" для односвязного списка в C++. Этот пример позволяет копировать содержимое одного списка в другой, обеспечивая грамотное управление памятью и предотвращая утечки.
Не забывайте, что при перегрузке оператора "=" всегда хорошей практикой является проверка на самоприсваивание (this == &other), чтобы избежать ненужных операций копирования и потенциальных проблем с управлением памятью.
Спасибо за ваш пример!