如何使用多态性填充链接列表

How do I populate a linked list using polymorphism?

本文关键字:链接 列表 填充 多态性 何使用      更新时间:2023-10-16

我已经设置了一个由列表类和节点类组成的链接列表,如何用不同类的节点填充列表类?

这些元素必须是指针(最好是智能)以避免切片。那是我看到的单一限制。

YourList<std::unique_ptr<BaseClass> > myList;
myList.add(new DerivedClassA);
myList.add(new DerivedClassB);

如何用不同类的节点填充列表类?(现在编译时间多态性,将不同的对象放入不同的列表中)

我认为您当前有类似的东西:

class Node {
public:
  Node* next;
  int datum;
  int& GetDatum() { return datum; }
};
class List {
public:
  Node* head;
  int Count();
};
int List::Count() { /* compute length */; return length; }
int main () { List a; List b; }

我想您还有其他更有用的成员功能,但是这些足以证明这一点。

您可以将上述代码转换为使用模板使用编译时间多态性:

#include <string>
template<class T>
class Node {
public:
  Node* next;
  T datum;
  T& GetDatum() { return datum; }
  };
  template<class T>
  class List {
  public:
    Node<T>* head;
    int Count();
  };
  template<class T>
  int List<T>::Count() { /*...*/; return length; }
  int main () { List<int> a; List<std::string> b; return a.Count(); }