编写一个父类,名为List。再编写2个子类,分别是ArrayList和LinkedList,公有继承List。 其中List类只有一个数据成员,size,并且是protected的。 ArrayList本身拥有2个数据成员,分别是data和capacity(请参考实训作业10);LinkedList本身拥有1个数据成员,为head,且须提供一个内部结构体(请参考实训作业11)。 为了方便测试,在List类中为size提供get和set函数。子类中无需提供任何函数
时间: 2024-02-18 16:59:05 浏览: 157
c++程序设计与面向对象,第三章类和对象
4星 · 用户满意度95%
好的,以下是符合要求的代码:
```c++
class List {
protected:
int size;
public:
List() : size(0) {}
int getSize() const { return size; }
void setSize(int s) { size = s; }
};
class ArrayList : public List {
private:
int* data;
int capacity;
public:
ArrayList(int cap) : capacity(cap), data(new int[cap]) {}
~ArrayList() { delete[] data; }
};
class LinkedList : public List {
private:
struct Node {
int val;
Node* next;
Node(int v, Node* n = nullptr) : val(v), next(n) {}
};
Node* head;
public:
LinkedList() : head(nullptr) {}
~LinkedList() {
while (head) {
Node* next = head->next;
delete head;
head = next;
}
}
};
```
在上面的代码中,List类作为父类,拥有一个数据成员size,表示列表的大小。为了方便测试,我们提供了一个公有的getSize函数和一个公有的setSize函数,分别用于获取和设置size。
ArrayList类和LinkedList类都是List类的子类,它们都继承了size数据成员和getSize、setSize函数。
ArrayList类本身拥有两个数据成员,data和capacity,分别表示列表的数据和容量。在构造函数中,我们通过new运算符为data分配了一块大小为capacity的动态数组。在析构函数中,我们通过delete[]运算符释放了data所指向的内存。
LinkedList类本身只有一个数据成员,head,表示链表的头结点。为了方便测试,我们提供了一个内部结构体Node,表示链表中的一个节点,包含一个int类型的val和一个指向下一个节点的指针next。在构造函数中,我们将head初始化为nullptr,表示链表为空。在析构函数中,我们通过while循环删除链表中的每个节点,直到head为nullptr。
阅读全文