为什么子类变量在调用超类方法时没有改变c++

问题描述 投票:0回答:1
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;
};

方法调用后变量赋值的图片: Picture of Variables assignments after the method is called

c++ oop data-structures linked-list strategy-pattern
1个回答
1
投票

我认为你声明了两次变量。我的意思是在你的基类中你声明:

public:
Node *head;
Node* lastNode;
int _size = 0;

当一个类公开继承另一个类时,基类的所有公共变量也在子类中声明。这意味着您的

CircularLinkedList
类中已经有了这些变量,但您再次声明了它们。现在您有了其中两个,并且您正在更改基类中的两个。从
CircularLinkedList
中删除声明。

© www.soinside.com 2019 - 2024. All rights reserved.