繁体   English   中英

C ++链表模板和节点

[英]c++ linked list template and Nodes

我目前正在尝试为我的列表类创建一个模板-该模板应该能够创建继承Employee(经理和职员)的Employee类的链表。

我对如何初始化列表感到困惑,因为它需要一种数据类型。

这是我的代码的一些片段:

template <class DataType>
struct Node
{
    DataType data;
    Node<DataType> *next;
};



template <class DataType>
class List
{
public:
    List();
    List(const List<DataType> & aplist);
    ~List();

    bool search(const DataType & element);  

    Node<DataType> first();
private:
    Node<DataType>* head;
    Node<DataType>* current;              
};

template <class DataType>
List<DataType>::List() 
{
    head = NULL;
}

template <class DataType>
List<DataType>::List(const List<DataType> & aplist)
{
    deepCopy(aplist);
}
... etc

在创建列表时,我有些困惑。 以前,当我将链接列表放在.header文件中时,我使用了List myList; 所以现在我尝试了

List<> myList;

并且期望数据类型。 所以我尝试了List <DataType> myList; 即使在模板中声明了它也不喜欢DataType? 我还尝试了Node,并得到了一个错误,并说缺少类模板“ Node”的参数列表。

我想知道是否有人可以解释如何启用我的链表(myList)初始化,然后允许输入3个不同的类Employee(基类),(Manager和Staff继承Employee)。

干杯

我建议您尝试使用类似int的实现:

List<int> myList;

如果可行,则使用模板的链表的基本实现是正确的。 现在,您可以开始创建自己的数据类型,例如员工类(如果您还没有),并使用该数据类型。 它应该以完全相同的方式工作。

请注意,类模板中的名称“ DataType”实际上不是数据类型,而是诸如int,Employee,...等真实数据类型的占位符。

您需要提供要列表保留的特定数据类型。 因此,如果它将仅包含Employee实例,则可能是

List<Employee> myList

但是,如果您想要多态行为,则将需要节点来存储指针。 例如

List<Employee*> myList

或者,取决于您的资源管理需求

List<std::unique_ptr<Employee>> myList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM