创建C ++类的新实例会导致重复

时间:2015-04-10 19:59:29

标签: c++ oop singly-linked-list

我是C ++的新手。我正在尝试实现LinkedList,为此我创建了两个类NodeLinkedList

我创建了一些测试功能。一个用于测试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);
}

2 个答案:

答案 0 :(得分:2)

初始化您的数据。

int data = 0;
int next = 0;

<强> Live On Coliru

#include <iostream>
#include <cassert>

using namespace std;

class Node {
  private:
    int data = 0;
    int next = 0;

  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);
}

int main() {
    testEmptyLinkedList();
}

答案 1 :(得分:0)

如果您打算实现LinkList,列表中的每个节点都应包含下一个节点的地址。

所以“next”应该被声明为指向Node的指针。对于列表的第一个节点也是如此。

class Node {
private:
     int data;
     Node *next;
     ....
};

class LinkedList {
private:
     Node *head;
     ...
};