【问题标题】:Beginner C++ - Explaining Class Definition初学者 C++ - 解释类定义
【发布时间】:2015-12-08 08:24:40
【问题描述】:

我是 C++ 的初学者,需要一些帮助来理解基本知识。这是我的类定义:

template <class T>
    class List;
template <class T >
    class Node {
    friend class List<T>;
private:
    Node *prev, *next;
public:
    T data;
    Node() :prev(), next() {}
    Node * Prev();
    Node * Next();
    Node * InsertAfter(List<T> * list, const T& data);
    Node * InsertBefore(List<T> * list, const T& data);
};

我不确定如何格式化我的构造函数

    Node() :prev(), next() {}

还有这段代码在这里:

    Node * InsertAfter(List<T> * list, const T& data);
    Node * InsertBefore(List<T> * list, const T& data);

这是否意味着该方法应该返回一个节点?

谢谢

【问题讨论】:

  • 这是否意味着该方法应该返回一个节点 - 是的,但它应该有文档它返回哪个节点。它可以返回新节点,也可以返回自身 (this)。
  • 好的,但是使用 Node() 的构造方法会是什么样子:prev(), next() {}
  • 这是否意味着该方法应该返回一个节点? 不!该方法应该返回一个指向Node 的指针。有很大的不同,在学习基础知识时了解两者之间的区别很重要。
  • Node * Prev();只是类似于 java getNode 或类似的东西?

标签: c++ pointers linked-list doubly-linked-list


【解决方案1】:

我会编写如下重写的默认构造函数:

Node() 
 : prev(nullptr)
 , next(nullptr) 
 {
 }

默认构造函数应始终包含将数据成员初始化为其零值或未初始化值(enum 名称为 UNKNOWNINVALID 的值)的例程。如果您的任何对象仍未初始化,如果有人试图对未初始化的对象执行任何操作,则归零会导致段错误。如果我们留下空的构造函数体,这比内存损坏更容易调试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 2013-07-04
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    相关资源
    最近更新 更多