我有一组类
class myClassA{
friend class MyFatherClass;
};
class MyFatherClass{
...
};
class MySonClass : public MyFatherClass {
};
我的父类可以访问类 MyClassA 的所有方法。 我还希望所有扩展 MyFatherClass 的类都能够调用此类方法。
我只能看到 2 个选项:
- 我随时都可以在 myClassA 中添加新类(class)为 friend 。 (我不喜欢)
- 我在父函数中创建了一些 protected 包装器以访问类 myClassA 中的方法。 (稍微好一点,但我仍然不喜欢它,因为我必须随时创建一个新的包装器,在 myClassA 中创建一个新方法)
你有什么更优雅的解决方案吗?
谢谢
最佳答案
首先……优雅是什么意思?您编写的代码更少?我建议您不要在可读性方面妥协。
使用友元不应该是一个轻率的决定。 SO 上有很多线程处理这个问题,但在这里我假设您已经知道这意味着什么。
选项 1) 更具可读性。当有人看到这个类时,他们将直接知道谁有权访问它。代码应该是有表现力的,这个选项完美地描述了意图。
选项 2) 有点矫枉过正。您正在编写一个包装器,以便您可以访问某些函数...为什么不首先将它们设置为 public
,因为该包装器具有公共(public)访问权限。它只是一个额外的抽象层。
您应该首先考虑功能(两者都有效)、表现力和可读性(此处选项 1 肯定更好)。
关于C++如何优雅地处理不被继承的友情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294599/