首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >结构和类的区别以及构造双向链表的节点?

结构和类的区别以及构造双向链表的节点?
EN

Stack Overflow用户
提问于 2012-05-27 03:30:34
回答 2查看 3K关注 0票数 3

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

代码语言:javascript
运行
复制
//===== 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;
}
EN

Stack Overflow用户

发布于 2012-05-27 03:50:22

这被称为构造函数初始化器列表,它用于初始化结构或类的属性。

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

Is it possible to defer member initialization to the constructor body?

长话短说,如果您不显式初始化初始化器列表中的属性,它将使用默认构造函数隐式初始化,因此,您将初始化变量两次。

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

代码语言:javascript
运行
复制
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;
};
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10769149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档