我已经建立了一个由列表类和节点类组成的链表,如何用不同类的节点填充列表类?
问问题
1621 次
2 回答
3
元素必须是指针(最好是智能的)以避免切片。这是我看到的唯一限制。
YourList<std::unique_ptr<BaseClass> > myList;
myList.add(new DerivedClassA);
myList.add(new DerivedClassB);
于 2012-10-22T21:07:43.090 回答
0
如何用不同类的节点填充列表类?(现在编译时多态性,不同的对象将被放入不同的列表中)
我假设你目前有类似的东西:
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(); }
于 2012-10-23T04:13:17.753 回答