【发布时间】:2018-08-04 00:52:20
【问题描述】:
我正在创建一个包含遍历节点的类的队列。
为此,我需要重载解引用器和“++”,以便编写迭代。
但我真的不知道如何从重载中取回我想要的东西。我总是得到旗帜。
这是两个类:
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) {}
};
我遇到的问题是重载。
项目 &operator*() const;考虑取回对数据成员“节点”指向的节点中的数据的引用。数据类型应该是 Item &。
Item &QIterator::operator*() const
{
return &Item;
}
重载: QIterator &operator++();被认为在执行“++”之后返回对 *this 所指内容的引用。数据类型应该是 QIterator &。
QIterator &QIterator::operator++() {
node = node->next;
return *this->node;
}
这个带指针的东西真的是我想要理解的东西,因为我可以想象一个程序通过使用它会变得多快。我应该如何理解这一点并记住它是如何工作的。
重载 QIterator operator++(int);应该返回执行“++”之前迭代器指向的节点内的内容。它返回数据类型 QIterator
QIterator QIterator::operator++(int) {
return this;
node = node->next;
}
【问题讨论】:
标签: c++ queue operator-overloading