具有多个子类的类的链接列表?

时间:2014-05-16 14:59:26

标签: c++ visual-studio-2012 linked-list subclass

所以我的问题是我不知道通过只有一个指向基类的指针来访问子类字段的方法。我本来会问这个怎么做,但我认为对于Linked列表可能有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

因此,如果您有父类和父类的链接列表,您可以使用dynamic_cast将其强制转换为子类,如下所示:

Child* child = dynamic_cast<Child*>(linkedlist_Parent_pointer);

您可以在此处找到有关dynamic_cast的更多信息:MSDN

链接列表伪代码示例: 想象一下,你有一个父类,让我们说:P,那么你有A,B和C,它们是从P继承的,所以你可以有一个P的链表:

A* a;
B* b;
C* c;
P* p;

Node<P*>* linked_list(a);
Node<P*>* node2(b);
Node<P*>* node3(c);
Node<P*>* node4(p);

linked_list.InsertAfter(node2);
node2.InsertAfter(node3);
node3.InsertAfter(node4);

/*So, this way you have a linked list containing elements of type A, B, C, P, which are all of type P respectively.
If you want to get a value of a node, let's say, the value of the first node of the linked list:
*/

A* a_val = dynamic_cast<A*>(linked_list.val);

所有这些都考虑到了一个节点类:

template<class T>
class Node
{
public:
Node(T* value)
{val = value;}

InsertAfter(Node<T>* node)
{next = node;}

T* val;
Node<T*>* next;
}

这只是一个简单的例子,可以帮助你。

答案 1 :(得分:0)

通常,基类具有枚举类型,然后继承的类具有填充的类型。

class base
{
  base() { t = TYPE_UNKNONW; }; 
  base (enum type) { t = TYPE_A; };
  enum  type { TYPE_UNKNONW, TYPE_A, TYPE_B };

  protected:
     enum type t;
}

class A : public base
{ 
    A (enum type x) : base (x) {};
}

然后在memeber函数中,您可以使用switch语句。当dynamic_cast不可用时,这是另一种选择。