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、尽可能用组合,万不得已才用私有继承

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

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

(0)

相关推荐

  • 详解C++编程中的私有继承和公有继承

    C++类的私有继承 在声明一个派生类时将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class ), 其基类称为私有基类(private base class ). 私有基类的公用成员和保护成员在派生类中的访问属性相当于派生类中的私有成员,即派生类的成员函数能访问它们,而在派生类外不能访问它们.私有基类的私有成员在派生类中成为不可访问的成员,只有基类的成员函数可以引用它们.一个基类成员在基类中的访问属性和在派生类中

  • C/C++ 公有继承、保护继承和私有继承的对比详解

    C/C++ 公有继承.保护继承和私有继承的区别 在c++的继承控制中,有三种不同的控制权限,分别是public.protected和private.定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承.这和Java有很大的不同,Java默认使用public继承,而且只有公有继承. 1.使用public继承时,派生类内部可以访问基类中public和protected成员,但是类外只能通过派生类的对象访问

  • C++ 中私有继承的作用

    C++ 中私有继承的作用 私有继承的 第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象. 第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员. 私有继承的含义:私有继承意味着 "用...来实现". 如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系. 因而,私有继承纯粹是一种实现技术. 私有继承意味着只是继承实

  • Java中Class类的作用与深入理解

    Java中Class类的作用与深入理解 在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识.这个信息跟踪着每个对象所属的类.JVM利用运行时信息选择相应的方法执行.而保存这些信息的类称为Class.可能容易产生混淆,容易想到class.不过二者没什么关系,class不过是描述类的一个关键字.而Class却是保存着运行时信息的类. 它能做什么?Class类可以帮助我们在程序运行时分析类,说白了就是获取类中的值.可能瞬间就想到了反射,没错!Class一般就是和反射配套使

  • 详解Python中__new__方法的作用

    目录 前言 一.__new__方法简介 1.初始化数据加载+解析类实例 2.初始化数据加载重写new方法+解析类实例 二.单例模式 1.用new方法如何实现单例模式 2.如何控制类仅执行一次初始化方法 三.多例模式 总结 前言 Python中类的构造方法__new__方法有何作用? Python类中有些方法名.属性名的前后都添加__双下画线,这种方法.属性通常属于Python的特殊方法和特殊属性.通过重写这些方法或直接调用这些方法来实现特殊功能.今天来聊聊构造方法__new__实际程序的应用场景

  • Java中的继承详情

    目录 一. 继承 1.1 继承的实现 1.2 继承的好处和弊端 二. 继承中的成员访问特点 2.1 继承中变量的访问特点 2.2 super 2.3 继承中构造方法的访问特点 2.4 继承中成员方法的访问特点 2.5 super内存图 2.6 方法重写 2.7 方法重写的注意事项 2.8. Java中继承的注意事项 三. 继承练习 总结 一. 继承 众所周知,我们Java语言是一种面向对象的编程语言,每当我们提到Java的特性,大家一定会在脑海里浮现出Java中的​继承.多态以及封装​. 我们在

  • 老生常谈 Java中的继承(必看)

    Java作为一面向对象的语言,具备面向对象的三大特征--继承,多态,封装. 继承顾名思义,继任,承接,传承的意思.面向对象的语言有一个好处,就是可以用生活中的例子来说明面向对象的特性.那么我们先来看看生活中的继承关系有哪些?最常见的:父母子女:汽车,电动车,自行车和车.无论哪种车,都有具备车的特性.再比如说:家里面的电饭锅,电磁炉,电冰箱.他们都属于电器类,都具有名字这个属性,也都需要用电这个方法.如果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?联系之前的知识,我们能

  • 解析C++编程中的继承方面的运用

    C++继承与组合详解 我们知道,在一个类中可以用类对象作为数据成员,即子对象(详情请查看:C++有子对象的派生类的构造函数).实际上,对象成员的类型可以是本派生类的基类,也可以是另外一个已定义的类.在一个类中以另一个类的对象作为数据成员的,称为类的组合(composition). 例如,声明Professor(教授)类是Teacher(教师)类的派生类,另有一个类BirthDate(生日),包含year,month,day等数据成员.可以将教授生日的信息加入到Professor类的声明中.如:

  • 详解C++中虚析构函数的作用及其原理分析

    C++中的虚析构函数到底什么时候有用的,什么作用呢. 一.虚析构函数的作用 总的来说虚析构函数是为了避免内存泄露,而且是当子类中会有指针成员变量时才会使用得到的.也就说虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的. 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做呢?下面用一个小例子来说明: #include<iostream> using namespace std; class Cl

  • Python中私有属性的定义方式

    Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field. 示例代码: class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = float(y) self.xx = x self.yy = y def get_x(self): return self.__x # 内部访问 if __name__ == "__ma

随机推荐