微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的迭代器类中访问私有数据而不破坏封装的最佳方法是什么?

如何解决在我的迭代器类中访问私有数据而不破坏封装的最佳方法是什么?

我有一堂这样的课:

template <typename T>
class Store {

private:
    struct pointNode {
        T data;
        pointNode* next;
        pointNode* prev;

        pointNode() :data(0),next(nullptr),prev(nullptr) {}
        pointNode(T n_data) : data(n_data),prev(nullptr) {}

        const T& getValue() {
            return this->data;
        }


    };
    pointNode* head;
    pointNode* tail;

public:

    class Iterator {
        using Iterator_type = Store<T>::pointNode;
    public:
        Iterator() = default;

        Iterator(Iterator_type* rNode) {
            current_node = rNode;
        }

    private:
        Iterator_type* current_node;

    };

};

我需要得到

Iterator_type* current_node;

获取此数据字段的正确方法是什么? 我知道您可以执行以下操作:

friend class Store;

在迭代器类中。但这被认为是正常的,还是有更漂亮的方法?谢谢

解决方法

执行此操作的规范方法是添加访问器函数,如下所示:

class Iterator
{
public:
    Iterator_type* get_current_node() const {
        return current_node;
    }

private:
    Iterator_type* current_node;
};

PS:请注意,默认构造函数 Iterator() = default; 未初始化 current_node 数据成员。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。