将基指针指向派生实例

时间:2017-04-29 19:21:37

标签: c++ inheritance

我正在研究我的C ++最终项目,我的教授指出我们必须为链表提供三个类文件。

第一个命名的LinkedList包含头部和尾部,以及两个重载的运算符,我们必须将列表用作数组,并在数组的末尾添加一个元素。

第二个命名的Node包含两个通用值Seat和Row。

第三个也是最后一个命名的RNode保存列表中下一个,前一个点的值以及预留状态。

我的问题是当使用我的LinkedList.cpp,定义所有函数时,我无法弄清楚如何将节点设置为等于head,因为类型不同。我可以使用tempNode.setNext(Head);设置列表中的下一个节点。但是当我尝试做tempNode = tempNode.getNext()时,它说类型不一样。让我做这项工作的简单方法是什么?请记住,我是一名具有C ++初学经验的新生;

这是我的代码。

这应该使用链接列表作为数组,并返回指向与传入的整数相关的节点的指针。

int& LinkedList::operator[] (const int &middle) {

    RNode *tempNode;
    tempNode->setNext(Head);

    tempNode = tempNode->getNext(); // Error here 

    for (int i = 0; i < middle; i++) {


    }



}

以下是我目前制作的三个类文件。

链接列表类

#ifndef LINKEDLIST_H_INCLUDED
#define LINKEDLIST_H_INCLUDED

#include "Node.h"

class LinkedList {


    private:

        Node* Head; // Head of linked list
        Node* Tail; // Tail of linked list


    public:

        // Constructors

        LinkedList(); // Set default values
        LinkedList(Node*, Node*); // Set values passed in to head and tail

        int& operator [] (const int &); // Overloaded [] operator PAGE 854 HOW TO USE THIS

            // Treat list like an array.
            // First node will be [0]
            // Return pointer to node indicated inside of brackets

        Node& operator += (const Node &); // Overloaded += operator

            // Adds a node to the end of the linked list

            // Head
            void setHead(Node*); // Sets head of list
            Node* getHead(); // Returns the head of list

            // Tail
            void setTail(Node*); // Sets tail of list
            Node* getTail(); // Returns tail of list


};



#endif // LINKEDLIST_H_INCLUDED

预订节点类

#ifndef RNODE_H_INCLUDED
#define RNODE_H_INCLUDED

#include "Node.h"

using namespace std;

class RNode : public Node {


    private:

        Node* Next; // Next node pointer
        Node* Prev; // Previous node pointer
        bool reservationStatus(); // Reservation status

    public:

        // Constructors
        RNode(); // Sets default values
        RNode(Node*, Node*, bool); // Takes values passed in and sets them

        // Overloaded operators
        friend ostream &operator << (ostream &, Node*); // Prints out correct symbol based on reservation status
        friend istream &operator >> (istream &, Node*); // Prints correct symbol based on reservation status  .

        // Next
        void setNext(Node*); // Sets next node in list
        Node* getNext(); // Returns next node in list

        // Prev
        void setPrev(Node*); // Sets previous node in list
        Node* getPrev();  // Returns previous node in list

        // Reservation Status

        void setReservationStatus(bool); // Sets reservation status of a current node
        bool getReservationStatus(); // Returns reservation status


};

#endif // RNODE_H_INCLUDED

节点类

#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

class Node {


    protected:

        int row;
        int seat;

    public:

        // Constructors
        Node(); // Sets default values
        Node(int, int); // Sets row and seat to values passed in

        // Row
        void setRow(int); // Sets row for current node
        int getRow(); // Gets row for current node

        // Seats
        void setSeat(int); // Sets seat for current node
        int getSeat(); // Gets seat for current node


};



#endif // NODE_H_INCLUDED

总之,如何匹配类型以便我可以将RNode tempNode设置为等于节点?这非常令人困惑,我无法找到解决这个问题的好解释。

请记住,根据我的指示,我必须以这种方式创建类。如果由我决定,我会将RNode和Node类结合起来。

先谢谢了。

0 个答案:

没有答案