结构和类之间的差异以及为双向链表构造节点
Differences between struct and class and constructing a node for double linked lists?
我正在尝试创建自己的双链表来获得学习经验。我的书显示了下面的节点结构,我想知道这是否等同于我创建的 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;
};
相关文章:
- 为什么我的双向链表删除函数会删除多个节点?
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 双向链表 - 无法删除第一个节点
- 双向链表 std::unique_ptr 类在节点删除时无法按预期工作
- 在给定节点之后插入双向链表中的节点
- 在双向链表中给定节点之后删除节点
- 尝试删除所选节点的双向链表
- 双向链表插入方法实现 - 正在搜索哪个节点
- 为什么我的函数没有打印出双向链表中的第一个节点?
- 使用类从双向链表中删除节点
- 从双向链表末尾删除节点时出现分段错误
- 删除双向链表 (C++) 中的节点
- 使用双向链表中的指针交换节点
- 在双向链表中插入节点
- 删除双向链表 (C++) 的最后一个节点
- 在循环双向链表的第一个节点之前/之后插入的算法是什么?
- 在双向链表的中间插入一个节点
- 双向链表节点的下一个是私有的
- 双向链表节点交换问题
- 在单向链表中添加双向链表节点