我在 C++ 中有一个嵌套类,它必须是公共(public)的。但是我需要它的一些方法对外部世界可见,其余的只对嵌套类可见。那是:

class set {
public:
    class iterator {
        innerMethod();
    public:
        outerMethod();
    }
}

我希望能够编写一个使用innerMethod() 的set 方法。如果我公开它,我也可以从外部访问它,这是我绝对不想要的。有没有办法在不做“ friend 类设置”的情况下做到这一点?

提前致谢!

最佳答案

如果不使用 friend 关键字,没有好的方法可以做到这一点。

在评论中你说:


friend 破坏了封装,也许这就是你的类主任说它是糟糕的编程的原因。 但是成员函数也破坏了封装, 那你为什么要使用它们呢?为什么不也避免它们呢? friend 以与成员函数相同的方式破坏封装; 因此,如果您愿意在需要 时使用成员函数 ,那么在需要时您应该也使用 friend 两者都存在于 C++ 中是有原因的!

class set {
public:
 class iterator
 {
  friend class set; //<---- this gives your class set to access to inner methods!

  void innerMethod(){}
 public:
  void outerMethod(){}
 };
 iterator it;

 void fun()
 {
  it.innerMethod();
  it.outerMethod();
 }
};

看到这个:How Non-Member Functions Improve Encapsulation

关于c++ - 保持公共(public)嵌套类的一部分仅对嵌套类可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4679983/

10-13 07:25