【问题标题】:how to override operator ++ to return a pointer如何覆盖运算符 ++ 以返回指针
【发布时间】:2015-01-02 10:06:47
【问题描述】:

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

我的标题代码:

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;
}

【问题讨论】:

  • 我认为您不能覆盖 ++ 以获得指针。目前您正在为Node 而不是Node* 覆盖它。 ptr++ 已经有了明确的含义——它的意思是ptr = ptr + 1;
  • 您可能想编写自己的迭代器类,它的作用类似于指针,但不是。然后你可以定义NodeIterator::operator ++

标签: c++ pointers operator-overloading


【解决方案1】:

使指针成为一个类:

// 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;}
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 2014-01-05
    • 2011-04-12
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多