C++ 外部类能否访问内部类私有方法/成员?

C++ 外部类能否访问内部类私有方法/成员?,c++,containers,private,inner-classes,C++,Containers,Private,Inner Classes,我在HashSet类中编写了一个迭代器类 但是,迭代器类的一些构造函数将只在HashSet类中使用 我认为这是一个好主意,隐藏他们对用户,使他们的私人。有没有办法让外部类可以访问内部类私有方法 如果没有,是否有其他方法使这些构造函数只能从HashSet类内部访问 编辑: 我知道如何从内部类访问外部类私有成员, 但我想问的是,如何从外部阶级接触内部阶级的私人成员, 因此,这个问题不是重复的 这是我的源代码: template <typename val_type, typename pre

我在HashSet类中编写了一个迭代器类

但是,迭代器类的一些构造函数将只在HashSet类中使用

我认为这是一个好主意,隐藏他们对用户,使他们的私人。有没有办法让外部类可以访问内部类私有方法

如果没有,是否有其他方法使这些构造函数只能从HashSet类内部访问

编辑:

我知道如何从内部类访问外部类私有成员, 但我想问的是,如何从外部阶级接触内部阶级的私人成员, 因此,这个问题不是重复的

这是我的源代码:

template <typename val_type, 
typename prehash = std::hash<val_type> >
class HashSet {

   ...

    template<typename val_type>
    class forward_iterator :
        public std::iterator<std::forward_iterator_tag, SList<val_type> > {

    public: // I want to keep those 3 constructors
                  // accessible to anyone

        forward_iterator() : 
            ptr(nullptr), 
            parent(nullptr),
            pos(-1) 
        {}

        forward_iterator(const forward_iterator* rhs) :
            ptr(rhs->ptr),
            parent(rhs->parent),
            ptr_it(rhs->ptr_it),
            pos(rhs->pos)
        {}
        forward_iterator(const forward_iterator& rhs) :
            ptr(rhs.ptr),
            parent(rhs.parent),
            ptr_it(rhs.ptr_it),
            pos(rhs.pos)
        {}

    private: // I want to hide the below constructors
             //from anyone not in  
             //HashSet class

        forward_iterator(pointer p, list_iterator liter, HashSet* prnt, 
        long long int pos_) : 
            ptr(p),
            ptr_it(liter),
            parent(prnt),
            pos(pos_)
        {}
        forward_iterator(reference p, list_iterator liter, HashSet* prnt, 
        long long int pos_) :
            ptr(p),
            ptr_it(liter),
            parent(prnt),
            pos(pos_)
        {}

        ...

     };

   ...

};
模板
类哈希集{
...
模板
类前向迭代器:
公共标准:迭代器{
public://我想保留这3个构造函数
//任何人都可以访问
前向迭代器():
ptr(空ptr),
父级(空PTR),
位置(-1)
{}
前向迭代器(常量前向迭代器*rhs):
ptr(rhs->ptr),
父级(右侧->父级),
ptr_it(rhs->ptr_it),
位置(右侧->位置)
{}
前向迭代器(常量前向迭代器和rhs):
ptr(右侧ptr),
母公司(右母公司),
ptr_it(右侧ptr_it),
位置(右侧位置)
{}
private://我想隐藏下面的构造函数
//不在家的人
//哈希集类
前向迭代器(指针p、列表迭代器升、哈希集*prnt、,
长整型位置:
ptr(p),
ptr_it(升),
母公司(prnt),
位置(位置)
{}
前向迭代器(参考p,列表迭代器升,哈希集*prnt,
长整型位置:
ptr(p),
ptr_it(升),
母公司(prnt),
位置(位置)
{}
...
};
...
};

你可能的副本可以使外部类成为内部类的朋友。“C++中,你的朋友可以触摸你的私人。”一个笑话,帮助你记住这一点。