如何重写运算符 ++ 以返回指针

how to override operator ++ to return a pointer

本文关键字:返回 指针 运算符 何重写 重写      更新时间:2023-10-16

我写了一个链表,我正在尝试覆盖++运算符。我将链表编写为类对象,将节点编写为包含数据和两个指针(下一个和上一个节点)的结构。每次我在节点指针之后调用 ++ 运算符时,我都想返回指向下一个的指针所以我想写ptr++而不是写ptr = ptr->next.

我的标头代码:

class MyLinkedList
{
private:
    struct Node
    {
        double data;
        Node *next = NULL;
        Node *previous = NULL;
        Node& operator ++ ();
    }
    Node *head;
    Node *tail;
}

CPP 代码:

MyLinkedList::Node& MyLinkedList::Node::operator ++ ()
{
    *this = *next;
    return *this;
}

例如

MyLinkedList a;
...
Node *ptr = a.tail;
while (ptr != NULL)
{
    ptr++; //ptr = ptr->next;
}

使指针成为类:

// This is an example
class NodePtr
{
    Node *m_node;
public:
    NodePtr() : m_node(nullptr) {}
    NodePtr(Node * node) : m_node(node) {}
    bool IsNull() const { return m_node == null; }
    Node& GetNode() { assert(m_node); return *m_node; }
    NodePtr& operator ++ () { assert(m_node); m_node = m_node->next; return *this;}
};