class LinkedList : public IDataList {
public :
Node *head;
Node* lastNode;
int _size = 0;
public : LinkedList() {
this->head = nullptr;
this->lastNode = nullptr;
}
void deAppend(int data) override;
};
然后我有一个循环linkedList,它是LinkedList的子类
class CircularLinkedList : public LinkedList {
public :
Node *head;
Node* lastNode;
int _size = 0;
public : CircularLinkedList() {
this->head = nullptr;
this->lastNode = nullptr;
}
void deAppend(int data) override;
};
这是添加到列表前面的 deAppend 方法
void LinkedList::deAppend(int data){
if (this->head== nullptr){
Node *newNode = new Node(data, nullptr);
this->head = newNode;
this->lastNode = newNode;
}else{
Node *newNode = new Node(data, this->head);
this->head = newNode;
}
this->_size+=1;
}
这是我的 CiruclarLinkedList 调用 deAppend 方法
void CircularLinkedList::deAppend(int data) {
LinkedList::deAppend(data);
this->lastNode->next = this->head;
}
事实是,为什么即使我调用方法 LinkedList::deAppend(data) 并在其中更改它们,lastNode 和 CircularLinkedList 变量的头部也不会更改。 IDataList 只是一个接口。
class IDataList {
public:
virtual void deAppend(int data) = 0;
};
方法调用后变量赋值的图片:
我认为你声明了两次变量。我的意思是在你的基类中你声明:
public:
Node *head;
Node* lastNode;
int _size = 0;
当一个类公开继承另一个类时,基类的所有公共变量也在子类中声明。这意味着您的
CircularLinkedList
类中已经有了这些变量,但您再次声明了它们。现在您有了其中两个,并且您正在更改基类中的两个。从 CircularLinkedList
中删除声明。