当前位置: 首页 > 编程笔记 >

C++ 中私有继承的作用

萧凡
2023-03-14
本文向大家介绍C++ 中私有继承的作用,包括了C++ 中私有继承的作用的使用技巧和注意事项,需要的朋友参考一下

C++ 中私有继承的作用

私有继承的

第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象。

第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员。

私有继承的含义:私有继承意味着 "用...来实现"。

如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系。

因而,私有继承纯粹是一种实现技术。

私有继承意味着只是继承实现,接口会被忽略。如果D私有继承于B,就是说D对象在实现中用到了B对象,仅此而已。
私有继承在软件 "设计" 过程中毫无意义,只是在软件 "实现" 时才有用。

1、私有继承的声明形式:    

  class  Foo  :  private  Bar 
   { 
      public: 
           void  fun(); 
     //  ... 
   };  

基类的公有和保护成员在派生类里都成为私有成员;承属于is-a关系的一部分,而私有继承属于has-a关系的一部分 

2、在架构上私有继承表达的是一种 'has   a '关系,但与聚合有以下不同:

      私有继承形式可能引入不必要的多重继承   

      私有继承形式允许访问基类的保护(protected)成员   

      私有继承形式允许派生类重写基类的虚函数(多态

3、尽可能用组合,万不得已才用私有继承

      通常你不会想访问其他类的内部,而私有继承给你这样的一些的特权(和责任)。但是私有继承并不有害。只是由于它增加了别人更改某些东西时,破坏你的代码的可能性,从而使维护的花费更昂贵。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 本文向大家介绍C/C++ 公有继承、保护继承和私有继承的对比详解,包括了C/C++ 公有继承、保护继承和私有继承的对比详解的使用技巧和注意事项,需要的朋友参考一下 C/C++ 公有继承、保护继承和私有继承的区别    在c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类

  • 本文向大家介绍详解C++编程中的私有继承和公有继承,包括了详解C++编程中的私有继承和公有继承的使用技巧和注意事项,需要的朋友参考一下 C++类的私有继承 在声明一个派生类时将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class ), 其基类称为私有基类(private base class )。 私有基类的公用成

  • FAQs in section [24]: [24.1] 如何表示“私有继承”? [24.2] 私有继承和组合(composition)有什么类似? [24.3] 我应该选谁:组合还是私有继承? [24.4] 从私有继承类到父类需要指针类型转换吗? [24.5] 保护继承和私有继承的关系是什么? [24.6] 私有继承和保护继承的访问规则是什么? 24.1 如何表示“私有继承”? 用 : priv

  • 问题内容: 这是一个有趣的代码片段: 我知道子类不会继承其父级的私有成员,但是obj设法在其中调用它不应具有的访问权的方法。在编译时,obj是Superclass类型,在运行时是Subclass类型。 这可能与以下事实有关:对doSomething()的调用发生在驱动程序类内部,而该驱动程序类恰好是其自己的类(以及为什么可以首先调用doSomething()的原因)。 因此问题归结为,obj如何访

  • 问题内容: 有人告诉我,对于Java子类,它可以继承其超类的所有成员。那么这是否意味着甚至私人成员?我知道它可以继承受保护的成员。 谁可以给我解释一下这个。我现在很困惑。 问题答案: 不,私有成员 不会被继承, 因为私有成员的范围 仅限 于定义它的类。仅公共成员和受保护成员被继承。 从, 超类私人成员 子类 不继承 其父类 的私有成员 。但是,如果超类具有用于访问其私有字段的公共或受保护的方法,则

  • 问题内容: 我对在继承中使用私有方法感到困惑,例如: 基于上面的代码,我感到困惑的私有方法的继承,是继承了私有方法来?还是两个类中的say方法完全无关?由于代码在main()方法中运行时出错,因此似乎无法从中调用私有方法。 问题答案: 如果您想让子类访问需要保留的超类方法,那么您正在寻找的关键字。 只允许包含该成员的类访问该成员。 允许在类及其所有子类中访问成员。 允许任何人访问该成员。