我有一个 A 类,它具有公共(public)方法并被在不同应用程序中实现的 100 个其他类使用。现在我想将这些公共(public)方法设为私有(private),这样就没有新类可以访问它们,但我希望现有的客户端类仍然可以访问它们。 但我什至不想触及那些客户类,因为所有者很少允许在他们的类中产生任何涟漪。
我检查过
Can I access private members from outside the class without using friends?
friend class with limited access
但所有(并非全部)都要求更改客户端代码。客户端代码不应更改。
一个直接的方法是让所有 N 类成为 friend ,但我不太愿意这样做。是否有任何模式或可接受的技术(请不要破解)来实现此访问限制? 谢谢,如果这是重复的,我深表歉意。
最佳答案
C++ 中的类是友元
,以表明类之间特殊的有意强耦合。 friend
的使用实际上增强了封装,而不是像人们普遍认为的那样破坏它。
怎么样?
没有友元,将功能暴露给其他类的唯一非 hack 方法是提供 public
、get
和 set
成员函数,这在事实上打破了封装,因为所有类(甚至那些不需要的类)现在都可以访问这些方法,因此成员增加了潜在破坏类数据的风险。
回到你的情况,如果你有 100 个类需要访问这个特定的类,那么你已经通过将这些方法作为 public
进行了正确的设计。现在试图让这些方法private
给 future 的类是在试图破解你现有的设计,你的设计不支持它。
将现有类作为 friend
并不完全符合上述标准,因此对于该场景来说不是一个好的选择。
但是,鉴于这种情况,您没有其他方法可以实现这一点。使现有类成为 friend
并授予它们特殊访问权限似乎是唯一的方法。这仍然很糟糕,因为 100 个只能访问少数方法的类现在可以访问您的整个类。
关于c++ - 限制对类方法的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954221/