class LinkedList{
public:
int data;
LinkedList *next;
};
class NewLinkedList: public LinkedList{
public:
int data2;
};
当我使用 NewLinkedList
时,它的 next
仍然是指向 LinkedList
而不是 NewLinkedList
的指针,因此如果不进行类型转换,我将无法访问 newlinkedlist.next->data2
。 (newlinkedlist
是 NewLinkedList
的对象。)
如何设计这两个类来避免这个问题?
有没有像SELF_TYPE *next;
这样的东西在被继承的时候自动变成派生类本身的类型?
最佳答案
您可以使用模板:
template <typename T>
class LinkedList{
public:
int data;
T * next;
};
class NewLinkedList: public LinkedList<NewLinkedList>{
public:
int data2;
};
这种技术被称为好奇重复模板模式 (CRTP)
为了改进设计,您的 LinkedList
类不应包含链表机制所需数据以外的任何数据:它应该只是一个基类。然后你像上面那样用专门的类将它子类化。
关于链表的C++继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40563796/