子类不需要父类的成员时怎么办?能够删除它们吗?
时间: 2023-11-09 14:06:49 浏览: 129
如果子类不需要继承自父类的某些成员,可以在子类中重新定义这些成员并覆盖父类中的同名成员。但是不能直接删除父类的成员。如果确实需要删除父类的成员,可以考虑从设计上重新组织类的结构,或者使用其他编程语言或技术来实现。但是需要注意的是,删除父类的成员可能会破坏原有的类层次结构,增加代码的维护难度。因此,在进行类设计时,应该仔细考虑成员的继承关系和层次结构,避免不必要的修改和破坏。
相关问题
编写一个父类,名为List。再编写2个子类,分别是ArrayList和LinkedList,公有继承List。 其中List类只有一个数据成员,size,并且是protected的。 ArrayList本身拥有2个数据成员,分别是data和capacity(请参考实训作业10);LinkedList本身拥有1个数据成员,为head,且须提供一个内部结构体(请参考实训作业11)。 为了方便测试,在List类中为size提供get和set函数。子类中无需提供任何函数
好的,以下是符合要求的代码:
```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。
阅读全文