C++如何优雅地处理不被继承的友情

标签 c++ inheritance friend

我有一组类

class myClassA{
    friend class MyFatherClass;
};

class MyFatherClass{
    ...
};

class MySonClass : public MyFatherClass {
};

我的父类可以访问类 MyClassA 的所有方法。 我还希望所有扩展 MyFatherClass 的类都能够调用此类方法。

我只能看到 2 个选项:

  1. 我随时都可以在 myClassA 中添加新类(class)为 friend 。 (我不喜欢)
  2. 我在父函数中创建了一些 protected 包装器以访问类 myClassA 中的方法。 (稍微好一点,但我仍然不喜欢它,因为我必须随时创建一个新的包装器,在 myClassA 中创建一个新方法)

你有什么更优雅的解决方案吗?

谢谢

最佳答案

首先……优雅是什么意思?您编写的代码更少?我建议您不要在可读性方面妥协。

使用友元不应该是一个轻率的决定。 SO 上有很多线程处理这个问题,但在这里我假设您已经知道这意味着什么。

选项 1) 更具可读性。当有人看到这个类时,他们将直接知道谁有权访问它。代码应该是有表现力的,这个选项完美地描述了意图。

选项 2) 有点矫枉过正。您正在编写一个包装器,以便您可以访问某些函数...为什么不首先将它们设置为 public,因为该包装器具有公共(public)访问权限。它只是一个额外的抽象层。

您应该首先考虑功能(两者都有效)、表现力和可读性(此处选项 1 肯定更好)。

关于C++如何优雅地处理不被继承的友情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8294599/

相关文章:

c++ - .lib 子依赖项

c++ - 对象指针的 vector 在 C++ 中似乎没有按预期执行

c++ - 当我尝试将一对插入 map 时,Qt 程序出现段错误

object - 是否可以在golang中同时指定带变量的结构和接口(interface)?

c++ - 使函数模板的某些特化成为 friend

c++ - 无法构建支持 Windows 应用商店的 C++ 库

c++ - 成员函数指针和继承

java - "has private access"泛型错误

c++ - C++ 中的 friend 和模板

c++ - ostream << 带有模板类的运算符,不能访问私有(private)成员