快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

新葡新京论坛:C++学习摘要之三:继承和派生



承袭性是面向工具法度榜样设计最紧张的机制之一。

1.承袭的观点

所谓承袭(inheritance)便是使用已有的数新葡新京论坛据类型定义出新的数据类型。

在承袭关系中,被承袭的类称为基类(base class)或父类,而经由过程承袭关系定义出来的新类则被称为派生类(derived class)或子类。

派生类既可以对基类的性子进行扩展又可以对基类进行限定,从而获得加倍机动、适用的可重用模块,大年夜大年夜缩短了法度榜样的开拓光阴。

一个派生类既可以从一个基类派生也可以从多个基类派生。从一个基类派生称为单承袭;从多个基类派生称为多重承袭。

(1)单承袭

单承袭的定义形式如下:

class 派生类名:造访要领 基类名

{

派生类中的新成员

};

此中,派生类名是新定义的类名。基类名必须是法度榜样中已有的一个类。

在单承袭中,每个类可以有多个派生类,然则每个派生类只能有一个基类新葡新京论坛。

(2)多重承袭

所谓多重承袭是指派生类从多个基类中派生而来的。

定义多重承袭类的要领如下:

class 派生类名:造访要领 基类名1,造访要领 基类名2……

{

派生类中的新成员

};

从定义款式上来看,多重承袭与单承袭的差别主如果多重承袭的基类多于一个。

(3)造访要领

不管在单承袭照样在多重承袭的定义款式中,造访要领,即承袭要领,可以为public、private或protected,假如省略,则默觉得private要领。

造访要领为public要领时,这种承袭称为公有承袭;

造访要领为private要领时,这种承袭称为私有承袭;

造访要领为protected要领时,这种承袭称为保护承袭。

2.派生类的天生历程

在给出了派生类的定义和响应成员函数的实今世码后,全部派生类的定义就算完成了,这是就可以使用该类定义响应的工具处置惩罚实际问题了。

因为派生类是在基类的根基上颠末承袭而孕育发生的,以是搞清派生类中到底有哪些成员对付更好的应用派生类是很紧张的。事实上,派生新类经历了三个步骤:

(1)接受基类成员

派生类承袭接受了基类的整个数据成员以及除了构造函数、析构函数之外的整个函数成员。也便是说,基类中的构造函数和析构函数使不能承袭到派生类中的。

(2)改造基类成员

对承袭到派生类中基类成员的改造包括两个方面:一是基类成员的造访要领问题,这由派生类定义时的造访要领来节制;二是对基类数据成员或成员函数的覆盖,新葡新京论坛也便是在派生类中定义了与基类中同名的数据成员或函数成员,因为感化域不合,于是发生同名覆盖,基类中的成员就被调换成派生类中的同名成员。

(3)添加新成员

在派生类中,除了从基类中承袭过来的成员外,还可以根据必要在派生类中添加新的数据成员和成员函数,以此实现需要的新功能。可以看出,在派生类中可以添加新成员的机制是承袭和派活力制的核心,包管了派生类在功能上比基类有所成长。

3.承袭要领对基类成员的造访节制

前面已经阐发,派生类承袭和接受了基类的整个数据成员和除了构造函数、析构函数之外的整个函数成员,但这些成员在派生类中的造访属性是可以调剂的,这是由派生类定义款式中的承袭要领来抉择的,也便是承袭要领节制了基类中具有不合造访属性的成员在派生类中的造访属性。

因为承袭要领可以有public、private和protected三种,不合的承袭要领会导致原本具有不合造访属性的基类成员在派生类中的造访属性也有所不合。这种造访包括两个方面:一是派生类中新增成员对从基类承袭来的成员的造访;二是派生类的外部经由过程派生类的工具从基类承袭来的成员的造新葡新京论坛访。

承袭和派生的机制可以使派生类承袭基类的成员,从而实现了原有代码的重用,然则,因为基类的构造函数和析构函数不能承袭,那么在派生类中,假如对派生类新增的成员进行初始化,就必须在派生类中根据必要加入新的构造函数,假如对从基类承袭下来的成员进行初始化,还必须由基类的构造函数来完成,以是必要在派生类中的构造函数,一方面认真调用基类的构造函数对基类成员进行初始化,另一方面还要认真对基类的构造函数所必要的参数进行需要的设置。

(1)单承袭要领下派生类构造函数的定义

在单承袭要领下,派生类的构造函数的定义款式如下:

派生类名::派生类构造函数名(形参表):基类构造函数名(参数表)

{

//派生类构造函数的函数体

}

在此定义款式中,派生类构造函数名后面括号内的参数表中包括参数的类型和参数名,而基类构造函数名后面括号内的参数表中只有参数名而没有参数类型,并且这些参数必须是滥觞于派生类构造函数名后面括号内的参数。

(2)多重承袭要领下的派生类构造函数的定义

在多重承袭要领下,派生类的构造函数必须同时认真所有基类构造函数的调用,对付派生类新葡新京论坛构造函数的参数个数必须同时满意多个基类初始化的必要。以是,在多重承袭要领下,派生类的构造函数的定义款式如下:

派生类名::派生类构造函数名(参数表):基类名1(参数表1)基类名2(参数表2)……

{

//派生类构造函数的函数体

}

此中,第1个参数表中的参数包孕了其后的各个参数表中的参数。

(3)派生类构造函数的履行序次

派生类构造函数履行的一样平常序次为:

1)调用基类构造函数,调用顺序按照它们被承袭时阐明的顺序(从左到右),而不是按派生类构造函数在初始化表中的序次;

您可能还会对下面的文章感兴趣: