私有继承 VS 组合:什么时候使用哪个?

2024-03-29

私有继承VS组合。

我有点困惑何时使用它们。由于私有继承在某种程度上密封了继承链,给出:

class A
{
private:
    int z;
protected:
    int y;
public:
    int x;
};

class B : private A
{
    /* B's data members and methods */
    /* B has access only to A's public and protected */
};

class C : public B
{
    /* can access no fields of B */
};

C将无法使用任何B的字段。什么时候使用私有继承,什么时候使用组合?

thanks!


此 C++ 常见问题解答条目 https://isocpp.org/wiki/faq/private-inheritance#priv-inherit-vs-compos恰当地回答你的问题。

在这里复制它:

可以时使用组合,必要时使用私有继承。

通常,您不想访问太多其他类的内部结构,而私有继承为您提供了一些额外的权力(和责任)。但私人继承并不是邪恶的,而是邪恶的。只是维护成本更高,因为它增加了有人更改某些内容而破坏您的代码的可能性。

私有继承的合法、长期使用是当您想要构建一个class Fred使用 a 中的代码class Wilma,以及来自的代码class Wilma需要从新类中调用成员函数,Fred。在这种情况下,Fred调用非虚函数Wilma, and Wilma本身的调用(通常是纯虚函数),被覆盖Fred。如果用组合来做到这一点会困难得多。

class Wilma {
 protected:
   void fredCallsWilma()
     {
       std::cout << "Wilma::fredCallsWilma()\n";
       wilmaCallsFred();
     }
   virtual void wilmaCallsFred() = 0;   // A pure virtual function
 };

 class Fred : private Wilma {
 public:
   void barney()
     {
       std::cout << "Fred::barney()\n";
       Wilma::fredCallsWilma();
     }
 protected:
   virtual void wilmaCallsFred()
     {
       std::cout << "Fred::wilmaCallsFred()\n";
     }
 };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

私有继承 VS 组合:什么时候使用哪个? 的相关文章

随机推荐

  • 检查字符串是否包含日文/中文字符

    我需要一种方法来检查字符串是否包含Japanese or Chinese text 目前我正在使用这个 string match u3400 u9FBF 但它不适用于以下示例 or 你能帮我吗 Thanks 通常用于中文和日文文本的 Uni
  • redirect_uri 的参数值无效

    当我尝试通过网络在 Google Plus 中验证我的应用程序时 出现错误 错误 无效 请求 redirect uri 的参数值无效 缺少权限 MY APP oauth2callback 我按照说明做了一切 https developers
  • 如何 git svn 仅获取具有特定模式的分支/标签?

    我想使用 git svn 查看 Boost 库 并且只想查看从版本 1 35 开始的主干和标签 即 tags release Boost 1 35 及更高版本 我的配置如下 svn remote svn ignore paths tags
  • MonoTouch.Dialog:UISearchBar 颜色

    在 3 月 31 日发布的 MonoTouch Dialog 中 我们无法设置UISearchBar现在不再这样了 因为有一个带有硬编码颜色的新容器对象 有没有更简单的方法来改变颜色UISearchBar 作为解决方法 我使用它 知道 UI
  • 无法更改样式:使用 getelementsbyclassname 显示

    document getElementByClassName xyz style display none 我无法隐藏课程内容 document getElementsByClassName返回一个类似数组的对象 您可以为此使用以下脚本 d
  • 如何减少Flutter的build_runner构建时间

    我的项目变得非常大 每次运行 build runner 都会花费太多时间来构建 我减少构建时间的想法是仅构建实际需要构建的文件 这些文件是我当前功能目录的文件 有没有办法只为单个文件夹或单个文件运行 build runner 您可以在 bu
  • Android 中的语音通话录音应用

    我想做一个录音通话的应用程序 可以吗 我期待 Android 领域经验丰富的人提供一些适当的指导 我在android中看到了android media MediaRecorder类 我需要使用那个类吗 感谢致敬 帕瓦蒂 卡玛隆 抱歉 开发人
  • 右值到左值转换 Visual Studio

    在 Visual Studio 2012RC 中存在一些非标准扩展 例如这段代码编译 include
  • Puppeteer:从使用延迟加载的页面中抓取整个 html

    我正在尝试获取使用延迟加载的网页上的整个 html 我尝试过的是一直滚动到底部 然后使用 page content 我还尝试在滚动到底部后滚动回页面顶部 然后使用 page content 两种方法都会抓取表格的一些行 但不是全部 这是我的
  • ActionBar.Tab 类型已弃用

    我正在尝试在 Eclipse 中创建滑动选项卡 但是当我导入时android app ActionBar Tab 它警告我导入 ActionBar Tab 类型已弃用 它使我的大部分代码成为警告并删除它 import android sup
  • 当浏览器忙于执行一些长时间运行的 JavaScript 时,WebDriver API 阻塞行为

    我在文档中的某个地方读到 WebDriver API 是非阻塞的 除了一些像 driver get 的 API 因此 执行 WebElement click 或 isDisplayed 通常应该是异步的 当然 假设启用了本机事件 我有一个简
  • Django:渲染快捷函数中的 context_instance 参数有什么用?

    有关 渲染 快捷方式的文档 https docs djangoproject com en 1 3 topics http shortcuts render 根据上面的链接 上下文实例参数定义为 用于渲染模板的上下文实例 默认情况下 模板将
  • 查找张量中沿轴的非零元素的数量

    我想找到沿特定轴的张量中非零元素的数量 有没有 PyTorch 函数可以做到这一点 我尝试使用非零 http pytorch org docs master torch html highlight nonzero torch nonzer
  • NSMutableArray 在 iPhone 应用程序中使用 NSLog 时不显示实际值

    我正在做一个数组的 NSLog 但它显示以下值而不是数据 我不知道如何解决这个问题并从数组中获取值 if surveyQuestions surveyQuestions NSMutableArray alloc init Total Sur
  • pandas 中没有“from_csv”方法

    当我尝试使用时from csvpython 3 7 中的方法 我收到归因错误 import pandas as pd pd DataFrame from csv adr AttributeError type object DataFram
  • 从javascript中的日期获取月份数

    我有一个 daterangepicker 函数 它以 2016 年 5 月 6 日的格式返回选定的日期 我想要做的是将月份提取为整数 因此从上面我应该能够返回数字 5 这是返回所选日期的代码行 getDateString new Date
  • 列表理解创建嵌套列表

    我想创建每月天数列表每年列表的嵌套列表 31 29 31 30 31 28 31 30 with mm 1 2 3 4 yy 2012 2013 但我的代码 result append calendar monthrange y m 1 f
  • 透明菜单/导航栏

    我无法解决 CSS 问题 我有一个应该是透明的导航栏 但由于不透明度属性以及它们是透明导航栏的子元素 其上的链接也会变得透明 你能帮我解决这个问题吗 如果您不希望链接文本受到影响 您应该修改以下规则 容器选择器看起来像这样 containe
  • 使用wireshark或其他工具绘制RTT直方图

    我有一个小型办公室网络 但我遇到了巨大的互联网链接延迟 我们有一个简单的网络拓扑 一台配置为运行 ubuntu 服务器 10 10 的路由器的计算机 2 个网卡 一个连接互联网 另一个连接办公室网络 和一个连接 20 台计算机的交换机 我在
  • 私有继承 VS 组合:什么时候使用哪个?

    私有继承VS组合 我有点困惑何时使用它们 由于私有继承在某种程度上密封了继承链 给出 class A private int z protected int y public int x class B private A B s data