我是靠谱客的博主 朴素发夹,最近开发中收集的这篇文章主要介绍类的继承与派生,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

类的继承与派生

一、            派生类生成过程

1.吸收基类成员。

2.改造基类成员。

3.扩充基类成员。

在类的派生中,构造函数和析构函数不能被派生。

派生类继承了基类的全部数据成员和除了构造,析构之外的全部函数、成员。

二、            类的继承方式有共有继承、保护继承、私有继承三种

1.公有继承。 基类的公有和保护成员的访问属性在派生类中不变,而基类的私有数据成员在派生类中不可访问。

2.私有继承。基类的公有保护成员以私有成员的身份出现在派生类中,而基类的私有成员不可访问。如果进一步派生的话,基类的全部成员就无法在新的派生类中被访问。实际上,相当于终止了基类功能的继续派生。

3.保护继承。基类的公有成员和保护成员以保护成员的身份出现在派生类中,而基类的私有成员不可访问。

三、            派生类的构造函数

构造派生类的对象时,就要对基类数据成员、新增数据成员和成员对象的数

据成员进行初始化。基类的构造函数并没有继承下来,因此,派生类的构造函数需要以合适的初始值作为参数,隐含调用基类和新增的内嵌对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。

       派生类构造函数的一般语法形式为:

      派生类名::派生类名(参数总表):基类名1(参数表1),……基类名n(参数表n,内嵌对象名1(内嵌对象参数表1),……内嵌对象名2(内嵌对象参数表2

{

              派生类新增成员的初始化语句

}

注意:

1.基类名、对象名之间的次序无关紧要,它们各自出现的顺序可以是任意的。

2.对于使用默认构造函数的基类或对象,不需要写出类名(对象名)和参数表。

派生类构造函数的执行次序一般为:

1.调用基类的构造函数,按照它们被继承时声明的顺序。

2.调用内嵌成员对象的构造函数,按照它们的声明顺序。

3.派生类构造函数体中的内容。

四、            虚基类

当类的部分或全部直接基类是从另一个共同基类派生而来的,在这些基类中

从上一级共同基类继承来的成员就拥有相同的名称。在派生类的的对象中,这些同名数据成员在内存中同时拥有多个拷贝,同一个函数名会有多个映射。我们可以用作用域分辨符来唯一标识并分别访问它们,也可以将共同基类设置为虚基类,这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。

例如:类B0是类B1B2的共同基类,类D由类B1B2共同派生而来。则应如下定义:

              Class B1: virtual public B0{…};

              Class B2: virtual public B0{…};

           Class D: public B1, public B2 { … };

五、            赋值兼容规则

指在需要基类对象的任何地方都可以使用派生类的对象来替代,包括以下三

种情况:

1.派生类的的对象可以赋值给基类对象。

2.派生类的对象可以初始化基类的引用。

3.派生类对象的地址可以赋给指向基类对象的指针。

在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继

承的成员。

最后

以上就是朴素发夹为你收集整理的类的继承与派生的全部内容,希望文章能够帮你解决类的继承与派生所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部