结构和类之间的差异以及为双向链表构造节点

Differences between struct and class and constructing a node for double linked lists?

本文关键字:双向链表 节点 之间 结构      更新时间:2023-10-16

我正在尝试创建自己的双链表来获得学习经验。我的书显示了下面的节点结构,我想知道这是否等同于我创建的 Node 类?结构中的该函数是否只是为结构中的每种数据类型赋值的构造函数类型?

//===== Struct =====
struct Node
{
    Node *next;
    Node *prev;
    std::string val;
    Node(const std::string &value, Node *nextVal = NULL, Node *prevVal = NULL) :
        val(value), next(nextVal), prev(prevVal) {}
};
//===== Class ====
class Node
{
public:
    Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL);
    virtual ~Node(void);
protected:
    Node *next;
    Node *prev;
    std::string val;
};
Node(std::string value = "", Node *pVal = NULL, Node *nVal = NULL)
{
    next = nVal;
    prev = pVal;
    val = value;
}

是的 - 就是这样。

下面是一个包含结构构造函数示例的页面。

http://www.yolinux.com/TUTORIALS/LinuxTutorialC++Structures.html

这称为构造函数初始值设定项列表,用于初始化结构或类的属性。

这通常是初始化属性的首选方法。 以下是解释原因的讨论:

是否可以将成员初始化推迟到构造函数体?

长话短说,如果您没有显式初始化初始值设定项列表中的属性,则使用默认构造函数隐式初始化该属性,因此,您将初始化变量两次。

此外,您的指针还需要访问器。

class Node
{
public:
    Node():next(NULL),prev(NULL),val("") {};
    Node(std::string value):next(NULL),prev(NULL),val(value) {};
    Node(std::string value, Node *pVal):next(NULL),prev(pVal),val(value) {};
    Node(std::string value, Node *pVal, Node *nVal):next(nVal),prev(pVal),val(value) {};
    virtual ~Node(void);
    std::string getValue()
    {
        return val;
    }
    void setValue(std::string v)
    {
        val = v;
    }
    Node * getNext()
    {
        return next;
    }
    void setNext(Node * n)
    {
        next = n;
    }
    Node * getPrevious()
    {
        return prev;
    }
    void setPrevious(Node * n)
    {
        prev= n;
    }
protected:
    Node *next;
    Node *prev;
    std::string val;
};