C++ 多态性的异质链表构造方法
时间: 2023-07-10 08:12:02 浏览: 64
C++中实现异质链表的常用方法是使用多态性。具体而言,我们可以定义一个基类 `Node`,然后派生出不同的子类,每个子类表示不同类型的节点。例如:
```cpp
class Node {
public:
virtual ~Node() {}
};
class IntNode : public Node {
public:
IntNode(int val) : value(val) {}
int value;
};
class StringNode : public Node {
public:
StringNode(const std::string& str) : value(str) {}
std::string value;
};
```
然后,我们可以定义一个链表节点 `LinkedListNode`,它包含一个指向基类 `Node` 的指针。这样,我们就可以将不同类型的节点放入链表中。
```cpp
class LinkedListNode {
public:
LinkedListNode(Node* n) : node(n), next(nullptr) {}
Node* node;
LinkedListNode* next;
};
```
对于链表的构造,我们可以定义一个 `LinkedList` 类,并提供相应的操作:
```cpp
class LinkedList {
public:
~LinkedList() {
LinkedListNode* cur = head;
while (cur) {
LinkedListNode* next = cur->next;
delete cur->node; // 释放节点占用的内存
delete cur;
cur = next;
}
}
void addNode(Node* n) {
LinkedListNode* newNode = new LinkedListNode(n);
if (!head) {
head = newNode;
} else {
LinkedListNode* cur = head;
while (cur->next) {
cur = cur->next;
}
cur->next = newNode;
}
}
private:
LinkedListNode* head = nullptr;
};
```
这样,我们就可以像下面这样构造异质链表:
```cpp
LinkedList list;
list.addNode(new IntNode(42));
list.addNode(new StringNode("hello"));
```
注意,由于基类 `Node` 包含虚析构函数,因此我们可以通过 `delete` 删除派生类对象,从而正确地释放内存。