【问题标题】:Accessing a data member I shouldn't be allowed to access [duplicate]访问我不应该被允许访问的数据成员[重复]
【发布时间】:2021-05-08 07:49:31
【问题描述】:

我为我的容器构建了一个迭代器类,看起来像这样

template <typename T> 
class binary_tree_iterator {
private:
    binary_tree<T>* tree;
public:
    ...
    bool operator!=(const binary_tree_iterator& rhs) const {return tree->data() != rhs.tree->data();}
};                            
                                                      This thing ----------------------^

我最好的理解是,我将我的类的一个实例传递给我的 then 类的另一个实例,然后在另一个中访问一个私有数据成员。这是允许的,因为它们是同一类的实例还是我遗漏了什么?

Data() 只是从容器中返回数据。

【问题讨论】:

  • 我还需要为我的解引用运算符返回一个引用。为了引用它,我是否需要存储此 data() 的返回值的副本?
  • 你不是在找friend吗?此外,您没有显示minimal reproducible example
  • edit 包含更多信息的问题。
  • @user202729 我不确定要添加什么。我的代码按原样工作,我想知道为什么。操作员工作得很好。
  • 一个类的任何实例都可以操作它可以处理的同一类的任何其他实例的privete 成员。 binary_tree_iterator&lt;T&gt;可以看到每个binary_tree_iterator&lt;T&gt;的内部

标签: c++ class iterator


【解决方案1】:

私有方法/字段不是对象实例私有的——它们是类本身私有的。因此,您可以将 Foo 传递给另一个 Foo 实例并访问所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多