如何为链表创建和执行复制构造函数?

How to create and execute a copy constructor for a linked list?

我已经尝试查看视频和较早的帖子,但仍然很难理解复制构造函数的概念。有人会帮我清理一下吗?我的 class 并没有真正涵盖这部分 100% 我的教授主要关注构造函数和析构函数。

主要 CPP

#include <iostream>
#include "Header.h"
using namespace std;


int main()
{
    node access;

    access.getData();
    access.outData();

    system("pause");
    return 0;
}

头文件

#include <iostream>

using namespace std;

class node
{
public:
    node(); // Had to create my own default constructor because of my copy constructor.
    node(const node &n); // This is a copy constructor.
    ~node();
    void getData();
    void outData();
private:
    int num;
    int lCount = 0; // Counts the number of nodes, increments after each user input.
    int *ptr; // Where the linked list will be copied into
    node *next;
    node *first;
    node *temp;
    node *point;
};

node::node()
{
    num = 0;
}

node::node(const node &n)
{
    temp = first;

    ptr = new node;
    for (int i = 0; i < lCount; i++)
    {
        ptr[i] = temp->num;
        temp = temp->next;
    }

}

node::~node() // Deletes the linked list.
{
    while (first != NULL)
    {
        node *delP = first; // Creates a pointer delP pointing to the first node.
        first = first->next; // "Removes first node from the list and declares new first.
        delete delP; // Deletes the node that was just removed.
    }
    cout << "List deleted" << endl;
}

void node::getData() // Simple function that creates a linked list with user input.
{
    int input = 0;
    point = new node;
    first = point;
    temp = point;

    while (input != -1)
    {
        cout << "Enter any integer, -1 to end." << endl;
        cin >> input;

        if (input == -1)
        {
            point->next = NULL;
            break;
        }
        else
        {
            lCount++;
            point->num = input;
            temp = new node;
            point->next = temp;
            point = temp;
        }
    }
}

void node::outData()
{
    temp = first;
    cout << "Original" << endl;
    while (temp->next != NULL)
    {
        cout << temp->num << endl;
        temp = temp->next;
    }

    cout << "Copied" << endl;
    for (int i = 0; i < lCount; i++)
    {
        cout << ptr[i] << endl;
    }
}

这个小片段是我特别遇到的问题:

node::node(const node &n)
{
    temp = first;

    ptr = new node;
    for (int i = 0; i < lCount; i++)
    {
        ptr[i] = temp->num;
        temp = temp->next;
    }
}

我想通了!我正在修补一个更简单的复制构造函数。我在理解语法时遇到了困难,一切都非常复杂,而且看起来让人不知所措。

#include <iostream>

using namespace std;

class node
{
public:
    node(int x); // Normal Construtor
    node(const node &cpy); // Copy Constructor
    void change(); // Changes data value
    void outData();
private:
    int data;
};

int main()
{
    node var1(123);
    var1.outData();
    node var2 = var1;
    var2.outData();

    var2.change();
    var1.outData();
    var2.outData();

    system("pause");
    return 0;
}

node::node(int x)
{
    data = x;
}

node::node(const node &cpy)
{
    data = cpy.data;
}

void node::outData()
{
    cout << data << endl;
}

void node::change()
{
    int userIn;
    cin >> userIn;
    data = userIn;
}

输出:

123
123

(输入:4444)

输出:

123
4444