Я новичок в C++. Я пытаюсь реализовать LinkedList, для которого я создал два класса: Node
и LinkedList
.Создание нового экземпляра класса C++ приводит к дублированию
Я создал несколько тестовых функций. Один для тестирования Node
, а другой - для проверки функции isEmpty
от LinkedList
. Однако, когда я пытаюсь их протестировать. Что создано в 'testNode() ends up being in the same Node I create inside
LinkedList as
head`.
Это может быть тривиальный вопрос, однако, как новичок в C++, эта концепция до сих пор не ясна для меня. Я хотел бы знать, почему это относится к тому же экземпляру, созданному ранее.
#include <iostream>
#include <assert.h>
using namespace std;
class Node
{
private:
int data;
int next;
public:
int getData(){return data;}
void setData(int new_data) {data = new_data;}
int getNext(){return next;}
void setNext(int new_next) {next = new_next;}
};
class LinkedList
{
Node head;
Node head2;
public:
bool isEmpty()
{
if (head.getData() == 0) {return true;}
return false;
}
};
void testNode()
{
Node aNode;
aNode.setData(15);
aNode.setNext(23);
assert (aNode.getData() == 15);
assert (aNode.getNext() == 23);
}
void testEmptyLinkedList()
{
LinkedList ll;
assert (ll.isEmpty() == true);
}
Вы никогда не инициализируете 'data' или' next' в конструкторе, что приводит к неопределенному поведению при попытке чтения значений из них. –
Всегда полезно практиковать и изучать новые вещи и испытывать проблемы, возникающие из определенного дизайна, но имейте в виду, что вам следует избегать связанных списков в C/C++. Существует видео от создателя языка C++, объясняющего, почему вам следует избегать этого дизайна и вместо этого использовать 'std :: vector'. поищи это! – Barracuda
@Barracuda благодарит за информацию. Я делаю это как часть процесса обучения на C++. Я буду помнить об этом, когда буду работать. Хорошая информация !. – lv10