必威体育Betway必威体育官网
当前位置:首页 > IT技术

继承

时间:2019-09-10 02:42:17来源:IT技术作者:seo实验室小编阅读:81次「手机版」
 

继承

继承

类之间的关系:has-a表示类的包含关系,即一个类的数据成员是已经定义好的类。use-a表示一个类部分的使用另一个类。这种关系通过类之间成员函数的相互联系,定义友元函数过对象参数传递来实现。is-a表示一种分类方式,描述类的抽象和层次关系。is-a机制称为“继承”。由多个类派生一个新的类的方法,称为“多继承”。

类的包含和类的继承都是软件重用技术。在许多情况下,程序中类的包含结构可以改为继承结构,反之亦然。

基类和派生类

格式:

class 派生类名:基类名表

{

数据成员和成员函数说明

};

其中基类名表的语句格式:访问控制  基类名1,访问控制  基类名2,……,访问控制  基类名n。用于表示当前定义的派生类的各个基类。根据基类名表中基类的数量分为多继承和单继承。

“访问控制”是表示继承权限的关键字,可以是:public,private,protected

公有继承时,基类的所有公有成员成为派生类的公有成员,基类中的保护成员成为派生类中的保护成员;私有继承时,基类中的所有公有成员和保护成员同时成为派生类的私有成员;保护继承时,基类中的所有公有成员和保护成员同时成为派生类的保护成员;无论派生类以何种方式继承基类,都不能直接调用基类的私有成员。

重名成员

c++允许派生类中的成员与基类成员重名,在派生类中访问重名成员时,屏蔽基类的同名成员,即覆盖。如果要在派生类中使用基类的重名成员,可以显式的使用作用域符指定,格式如下:类名::成员。

重名数据成员,如果在派生类中定义了与基类相同名字的数据成员,根据继承规则,在建立派生类对象时,系统会分别建立不同的存储空间。重名成员函数,在派生类中定义与基类同名的成员函数,称为在派生类中重载基类的成员函数。有调用形式指示this指针的不同类型,调用不同版本的成员函数。

类成员访问特性和类继承性质决定类成员的可见性和作用域。在类层次体系中,只要访问特性和继承特性允许,派生类对基类的所有成员都可见,但基类对派生类的自定义成员一无所知。这说明基类成员的作用域从被说明时开始,一直延伸到它的所有派生类。即使因为访问特性或继承关系约束而被屏蔽,在派生类中不可见,但它们的作用域仍然有效。

派生类中访问静态成员

如果在基类中定义了静态成员,这些静态成员将在整个类体系中被共享,根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质。

基类的初始化

构造函数名(变元表):基类(变元表),数据成员1(变元表)……

“:”后面是基类构造函数及对象成员各自对应的参数初始式。构造函数的执行顺序是:首先执行基类,然后执行类对象成员,最后执行类派生类本身。如果有间接基类,则首先执行间接基类构造函数。它们的执行顺序是由系统规定的,与参数初始式列表安排无关。参数初始式列表只是传递参数。

多继承

多继承说明非常直接,只需在派生类名的冒号后跟上用逗号分隔的基类名列表即可。例:class C:public B1,public B2{}

类C公有继承B1和 B2。它的成员包含B1,B2中的成员,以及它本身定义的成员。

构造时,先执行基类构造函数,在执行子类构造函数,最后执行本身的构造函数。一个派生类对象可以拥有多个直接或间接基类的成员,对于不同名的成员,访问不会出现二义性。但是,如果不同的基类有同名成员,派生类对象访问它们是就应加以识别。

相关阅读

HeadFirst设计模式——如何实现自己的鸭鸣器不继承Duc

声明: 《Head First设计模式》23页提问,如何实现自己的鸭鸣器不继承Duck类?本文解答这个问题。 正如该书前面所说,通常【有一个】比

JAVA继承顺序

当使用继承这个特性时,程序是如何执行的;继承的初始化顺序1.初始化父类再初始子类2.先执行初始化对象中属性,再执行构造方法中的初始

WordPress 和继承者们

本文原载于 Medium,作者是 Jason Gowans,这里是译文。不管从哪个角度看,WordPress 都是一个现象级的产品。全世界有四分之一的网站都

分享到:

栏目导航

推荐阅读

热门阅读