我目前正在尝试为我的列表类创建一个模板 - 它应该能够创建一个继承Employee(Manager和Staff)的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&lt;数据类型&GT;我的列表;并且它不喜欢DataType,即使它在我的模板中声明了吗?我也尝试过Node并得到错误,说明类模板的参数列表&#34; Node&#34;不见了。
我想知道是否有人可以解释如何启用我的链表(myList)初始化然后允许输入3个不同的类Employee(基类),(Managerand Staff继承Employee)。
干杯
答案 0 :(得分:1)
我建议你尝试使用像int这样的实现:
List<int> myList;
如果可行,则使用模板的链接列表的基本实现是正确的。现在,您可以开始创建自己的数据类型,如员工类(如果您还没有),并使用该数据类型。它应该以完全相同的方式工作。
请注意名称&#34; DataType&#34;在您的类模板中实际上不是数据类型,而是实际数据类型的占位符,如int,Employee,...
答案 1 :(得分:1)
您需要提供希望列表保留的特定数据类型。因此,如果它只保留Employee实例,那么这可能是
List<Employee> myList
但是如果你想要多态行为,那么你需要节点存储指针; e.g。
List<Employee*> myList
或者,取决于您的资源管理需求
List<std::unique_ptr<Employee>> myList