当前位置:天才代写 > tutorial > C语言/C++ 教程 > C++进修摘要之三:担任和派生

C++进修摘要之三:担任和派生

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:490

副标题#e#

担任性是面向工具措施设计最重要的机制之一。

1.担任的观念

所谓担任 (inheritance)就是操作已有的数据范例界说出新的数据范例。

在担任干系中,被担任的类称为 基类(base class)或父类,而通过担任干系界说出来的新类则被称为派生类(derived class)或子类 。

派生类既可以对基类的性质举办扩展又可以对基类举办限制,从而获得越发机动、合用的可重 用模块,大大缩短了措施的开拓时间。

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

(1)单担任

单担任的定 义形式如下:

class 派生类名:会见方法 基类名

{

派生类中的新成员

};

个中,派生类名是新界说的类名。基类名必需是措施中已有的一个类。

在单担任中,每个 类可以有多个派生类,可是每个派生类只能有一个基类。

(2)多重担任

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

界说多重担任类的方法如下:

class 派生类名:会见 方法 基类名1,会见方法 基类名2……

{

派生类中的新成员

};

从界说名目上来看,多重担任与单担任的区别主要是多重担任的基类多于一个。


#p#副标题#e#

(3)访 问方法

不管在单担任照旧在多重担任的界说名目中,会见方法,即担任方法,可觉得public、 private或protected,假如省略,则默认为private方法。

会见方法为public方法时,这种担任称 为公有担任;

会见方法为private方法时,这种担任称为私有担任;

会见方法为protected 方法时,这种担任称为掩护担任。

2.派生类的生成进程

在给出了派生类的界说和相应成 员函数的实现代码后,整个派生类的界说就算完成了,这是就可以操作该类界说相应的工具处理惩罚实际问题 了。

由于派生类是在基类的基本上颠末担任而发生的,所以搞清派生类中到底有哪些成员对付更 好的利用派生类是很重要的。事实上,派生新类经验了三个步调:

(1)接收基类成员

派 生类担任接收了基类的全部数据成员以及除告终构函数、析构函数之外的全部函数成员。也就是说,基类 中的结构函数和析构函数使不能担任到派生类中的。

(2)改革基类成员

对担任到派生类 中基类成员的改革包罗两个方面:一是基类成员的会见方法问题,这由派生类界说时的会见方法来节制; 二是对基类数据成员或成员函数的包围,也就是在派生类中界说了与基类中同名的数据成员或函数成员, 由于浸染域差异,于是产生同名包围,基类中的成员就被替换成派生类中的同名成员。

(3)添加 新成员

在派生类中,除了从基类中担任过来的成员外,还可以按照需要在派生类中添加新的数据 成员和成员函数,以此实现须要的新成果。可以看出,在派生类中可以添加新成员的机制是担任和派朝气 制的焦点,担保了派生类在成果上比基类有所成长。

3.担任方法对基类成员的会见节制

前面已经阐明,派生类担任和接收了基类的全部数据成员和除告终构函数、析构函数之外的全部函数成员 ,但这些成员在派生类中的会见属性是可以调解的,这是由派生类界说名目中的担任方法来抉择的,也就 是担任方法节制了基类中具有差异会见属性的成员在派生类中的会见属性。

由于担任方法可以有 public、private和protected三种,差异的担任方法会导致本来具有差异会见属性的基类成员在派生类中 的会见属性也有所差异。这种会见包罗两个方面:一是派生类中新增成员对从基类担任来的成员的会见; 二是派生类的外部通过派生类的工具从基类担任来的成员的会见。

(1)公有担任

当类的 担任方法为公有担任时,基类中public和protected成员的会见属性在派生类中稳定,而基类private成员 不行会见。也就是说,基类的public和protected成员在公有担任方法下别离担任为派生类的public和 protected成员,派生类中的其他成员可以直接会见它们,在派生类的外部只能通过派生类的工具会见从 基类担任来的public成员。而无论是派生类的成员照旧派生类的工具都无法会见从基类担任来的private 成员。

(2)私有担任

当类的担任方法为私有担任时,基类中的public和protected成员都 以private成员呈此刻派生类中,而基类private成员不行会见。也就是说,基类的public和protected成 员在私有担任方法下被担任为派生类的private成员,派生类中的其他成员可以直接会见它们,但在派生 类的外部无法通过派生类的工具会见它们。而无论是派生类的成员照旧派生类的工具都无法会见从基类继 承来的private成员。

#p#分页标题#e#

可以看出,颠末私有担任后,所有基类的成员都成为派生类的私有成员,如 果进一步派生的话,基类的成员就无法在新的派生类中被会见。因此,颠末私有担任后,基类的成员再也 无法在今后的派生类中发挥浸染,实际是相当于中止了基类成果的继承派生。

(3)掩护方法

当类的担任方法为掩护担任时,基类中的public和protected成员都以protected成员呈此刻派生 类中,而基类private成员不行会见。也就是说,基类的public和protected成员在掩护担任方法下被担任 为派生类的protected成员,派生类中的其他成员可以直接会见它们,但在派生类的外部无法通过派生类 的工具会见它们。而无论是派生类的成员照旧派生类的工具都无法会见从基类担任来的private成员。

#p#副标题#e#

4.派生类的结构函数和析构函数

担任和派生的机制可以使派生类担任基类的成员,从而 实现了原有代码的重用,可是,由于基类的结构函数和析构函数不能担任,那么在派生类中,假如对派生 类新增的成员举办初始化,就必需在派生类中按照需要插手新的结构函数,假如对从基类担任下来的成员 举办初始化,还必需由基类的结构函数来完成,所以需要在派生类中的结构函数,一方面认真挪用基类的 结构函数对基类成员举办初始化,另一方面还要认真对基类的结构函数所需要的参数举办须要的配置。

(1)单担任方法下派生类结构函数的界说

在单担任方法下,派生类的结构函数的界说格 式如下:

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

{

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

}

在此界说名目中,派生类结构函数名后头括号内的 参数表中包罗参数的范例和参数名,而基类结构函数名后头括号内的参数表中只有参数名而没有参数范例 ,而且这些参数必需是来历于派生类结构函数名后头括号内的参数。

(2)多重担任方法下的派生 类结构函数的界说

在多重担任方法下,派生类的结构函数必需同时认真所有基类结构函数的挪用 ,对付派生类结构函数的参数个数必需同时满意多个基类初始化的需要。所以,在多重担任方法下,派生 类的结构函数的界说名目如下:

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

{

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

}

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

(3)派生类结构函数的执行序次

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

1)挪用基类结构函数,挪用顺序凭据它们被担任时 说明的顺序(从左到右),而不是按派生类结构函数在初始化表中的序次;

2)挪用子工具的结构 函数(假如在派生类中存在子工具的话),挪用顺序凭据它们在类中说明的顺序;

3)执行派生类 结构函数的函数题。

当派生类的工具被删除时,派生类的析构函数被执行。由于基类的析构函数 不能被担任,因此在执行派生类的析构函数时,基类的析构函数也将被挪用。而执行顺序是先执行派生类 的析构函数,再执行基类的析构函数,其顺序与执行结构函数是的顺序正好相反。

#p#副标题#e#

5.虚基类

在多重担任的环境下,派生类具有两个以上的直接基类,而这些直接基类的一部门或全部又是从 另一个配合基类派生而来的,这些直接基类中从上一级基类担任来的成员拥有沟通的名称,在派生类的对 象中,这些同名成员在内存中同时拥有多个拷贝,如何举办判别呢?有两种要领,一是利用浸染域运算符 独一标帜并别离会见它们;二是将直接基类的配合你基类配置为虚基类。

(1)利用浸染域运算符 要领

这种要领就是在需要会见的成员名前加上直接基类名和浸染域运算符“::“。 其名目是:

直接基类名::数据成员名

直接基类名:成员函数名(参数表)

(2) 虚基类的要领

该要领就是将直接基类的配合基类配置为虚基类,即在基类的会见方法前加上要害 字“virtual“,声明虚基类的名目如下:

class 派生类名:virtual 会见方法 基类 名

{ //声明派生类成员};

虚基类固然被一个派生类间接地多次担任,但派生类却只担任 一份该基类的成员,这样就制止了在派生类中会见这些成员时的二义性。

6.虚基类机制下的结构 函数的执行顺序

虚基类机制下的结构函数的执行顺序与一般多重担任下的结构函数的执行顺序是 差异的,其执行顺序如下:

(1)一个类的所有直接基类中,虚基类的结构函数在非虚基类之前调 用;

(2)假如一个类的所有直接基类中有多个虚基类,则这些虚基类的结构函数的执行顺序与在 派生类中的说明的序次沟通;

(3)若虚基类由非虚基类派生而来,则仍然先挪用基类结构函数, 再凭据派生类中结构函数的执行顺序挪用。

相关文章

C++进修摘要之二:结构函数和析构函数

http://www.bianceng.cn/Programming/cplus/200911/12302.htm

C++进修摘要之一:类和工具

http://www.bianceng.cn/Programming/cplus/200911/12301.htm

 

    关键字:

天才代写-代写联系方式