我想要做的是拥有一个带有默认构造函数,复制构造函数,复制赋值构造函数和析构函数的单链表。我几乎没有启动它,因为如果带有int数据的Node
和下一个指针应该是一个单独的类或我的方式,我很困惑。
class list {
public:
list(): next(NULL) {} // default constructor
list(const list &t){} // copy constructor
list& operator= (const list &t) // assignment operator
~list(){} //destructor
void print()
private:
struct Node {
data x;
Node *next;
}_list;
}
答案 0 :(得分:2)
从逻辑上讲,节点是一个单独的结构(类),但在通常的实现中,列表本身由第一个节点表示。
所以,基本上,你不会有一个list
类(如果你这样做,它只需要一个指向第一个节点+构造函数/赋值运算符/析构函数的指针):
struct Node {
data x;
Node *next;
};
class list{
public:
list(): next(NULL) {} // default constructor
list(const list &t){} // copy constructor
list& operator= (const list &t) // assignment operator
~list(){} //destructor
void print() ;
private:
Node* first;
}
答案 1 :(得分:0)
如果通过“单独的类”表示没有嵌套在 list 中,那么不,它最好是嵌套(和私有)。但这并不意味着你不能给它构造函数,析构函数,运算符,方法等(即把它变成一个完整的类)。
答案 2 :(得分:0)
这完全有效。如果仅在Node
中使用list
,则只是一个实现细节。但是,如果您需要Node
之外的list
,例如在iterator
类中,您需要在list
之外实现它。
答案 3 :(得分:0)
有一个内部类很好,但是,如果/当你实现像内部类的构造函数这样的方法时,范围解析运算符需要包含外部和内部类名。例如,
List::Node::Node(const DataType& nodeData, Node* nextPtr) {stuff}
通过在List类的私有部分中声明Node类,您将提供针对外部访问的封装,但仍允许List类具有访问权限。