我正在尝试为学习体验创建自己的双链表。我的书显示了下面的节点结构,我想知道是否等同于我创建的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;
}
答案 0 :(得分:1)
答案 1 :(得分:1)
这称为构造函数初始化列表,它用于初始化结构或类的属性。
这通常是初始化属性的首选方式。这是一个解释原因的讨论:
Is it possible to defer member initialization to the constructor body?
简而言之,如果您没有在初始化列表中显式初始化属性,则使用默认构造函数隐式初始化它,因此,您将初始化变量两次。
此外,您需要指针的访问器。
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;
};