我有一个类赋值(读:不使用STL),我需要创建一个有序的链接对象列表,但我不太清楚如何去做。
我使用的类包含整数和字符串成员,但它只是这些整数成员中的一个将被排序。我目前有一个功能齐全的链表模板,可以使用整数数据成功运行。
现在我的问题在于将其转换为与我的班级一起工作。在实例化此链接列表时,必须在我正在排序的类Poster之后定义<Type>
,在这种情况下该类型为Poster
。但是,在链表类的声明中,有class Node
的声明和定义,其中包含
class Node
{
public:
Type Element;
Node *Next, *Previous;
Node() : Next(NULL), Previous(NULL) {} // Default constructor
Node (Type Data, Node *PNode = NULL) : // Non-default constructor
Element (Data),
Next (PNode),
Previous (PNode) {}
};
当我声明Poster
时引入LinkedList<Poster> listOfPosters
的成员时,我不确定这个现有定义是如何工作的。我是否应该将Node
的上述定义替换为class Poster
的内容,或者将节点中的Type Element
标记为{{1}的成员的一种包罗万象的容器},以便可以通过class Poster
访问Poster
的成员?
答案 0 :(得分:1)
Node.Element
成员将存储Poster
的(按值)副本。无需在Node的定义中手动替换任何内容;这就是C ++模板的重点。
当您声明LinkedList<Poster>
对象时,编译器将生成一个新类,并用Type
替换Poster
占位符的所有实例。这将在Node
类中自动创建一个适当的LinkedList<Poster>
类,该类表示包含Poster
对象的节点。
答案 1 :(得分:1)
我猜测LinkedList类的声明看起来像
template<class Type>
class LinkedList
{ ... }
当使用链表类(主程序)的程序实例化一个LinkedList类时,如下所示
LinkedList<Poster> myLinkedList;
编译器在编译时从模板生成代码,并将所有出现的“Type”替换为“Poster”。因此,您无需更改链接列表或节点类。