对队列C 的操作员摩托装载

Operator-oveloading dereference for a queue C++

本文关键字:摩托 操作员 队列      更新时间:2023-10-16

我正在用节点迭代的类创建一个队列。

要做到这一点,我需要超载Dereferencer和" ",以便我可以写一个迭代。

但是我真的没有得到如何从过载中恢复想要的东西。我一直都会得到标志。

这是两个类:

typedef Person Item;
class Node;
class QIterator
{
private:
    Node *node;
public:
    QIterator(); // default
    QIterator(Node *n); // initialized
    Item &operator*() const;
    QIterator &operator++(); // prefix ++i
    QIterator operator++(int); // postfix i++
    bool operator!=(const QIterator &qi) const;
};
//---------------------------------------------------------------------------
class QList
{
private:
    Node *first, *last;
public:
    QList() :first(nullptr), last(nullptr) {};
    ~QList() {};
    void enque(Item item);
    bool deque(Item &item);
    bool del(Item item);
    bool isEmpty()const;
    QIterator begin()const { return QIterator(first); }
    QIterator end() const { return QIterator(nullptr); }
};

这是节点的公共类:

class Node
{
public:
    Node *next;
    Item data;
    Node(Node *n, Item newData) : next(n), data(newData) {}
};

我有问题的是超载。

item& operator*((const;被认为是恢复对数据登录"节点"指向的节点中的数据的引用。数据类型应为项目&。

Item &QIterator::operator*() const 
{
    return &Item;
}

超载:Qiterator& operator ((;被认为是返回对" "之后的 *该点的引用。数据类型应为qiterator&。

QIterator &QIterator::operator++() {
    node = node->next;
    return *this->node;
}

这件事用指针是我想理解的,因为我可以想象程序通过使用程序的速度更快。我应该如何看待理解这一点并记住它是如何工作的。

超载Qiterator操作员 (int(;应返回在执行" "之前迭代器指向的节点内的内容。它返回dataype qiterator

QIterator QIterator::operator++(int) {
    return this;
    node = node->next;
}
Item &QIterator::operator*() const 
{
    return &Item;
}

是错误的,因为Item是一种类型,而不是对象。即使Item是一个对象,return &Item也是错误的,因为它会评估指针。您需要的是:

Item& QIterator::operator*() const 
{
    // return a reference to the item that the node points to.
    return node->data;
}

QIterator &QIterator::operator++() {
    node = node->next;
    return *this->node;
}

是错误的,因为返回类型与return语句中使用的表达式的类型不匹配。您需要使用:

QIterator& QIterator::operator++() {
   node = node->next;
   return *this;
}