【问题标题】:Operator-oveloading dereference for a queue C++ [closed]队列C ++的运算符重载取消引用[关闭]
【发布时间】: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


    【解决方案1】:
    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;
    }
    

    【讨论】:

    • 那么一个asterix 还会给我一个参考吗?我对指针的理解是 Item *item 是一个 Item 的地址,而 &item 是对该地址内部内容的引用。我是不是误会了?
    • @Newbie2018,在我看来,您对运算符&* 感到困惑。请参阅我的几个答案:stackoverflow.com/a/48938113/434551stackoverflow.com/a/36962697/434551。希望他们能消除您心中的一些疑虑。
    • 是的,我对此感到非常困惑:'D。你的帖子内容丰富。阅读它们后,我很确定我也写错了第三个运算符。但是您的帖子可能会设法找到错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多