分享
 
 
 

派生和继承

王朝c/c++·作者佚名  2006-01-06
窄屏简体版  字體: |||超大  

1.派生类的概念

以面向对象的程序设计的观点来看,继承表达的是对象类之间的相互关系。这种关系使得某类对象可以继承另外一类对象的特征和能力。如果一类对象继承了另一类对象的特征和能力,这个类就叫做所继承类的派生类。

1.1声明一个派生类的一般格式是:

class 派生类名:派生方式( public or private)基类名{

//派生类新增加或修改的数据和成员函数};

1.2派生类构造函数和析构函数的执行顺序

当派生类中不含对象成员时

●在创建派生类对象时,构造函数的执行顺序是:基类的构造函数→派生类的构造函数;

●在撤消派生类对象时,析构函数的执行顺序是:派生类的构造函数→基类的构造函数。

当派生类中含有对象成员时

●在定义派生类对象时,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;

●在撤消派生类对象时,析构函数的执行顺序:派生类的构造函数→对象成员的构造函数→基类的构造函数。.

1.3派生类构造函数和析构函数的构造规则

当基类中无显式定义构造函数或有函数但无参数时派生类可以不向基类传递参数,甚至可以不定义构造函数;

当基类中有构造函数且含有参数时,派生类必须定义构造函数以提供把参数传递给基类构造函数的途径。

⑴派生类构造函数的一般格式为:

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

// 派生类新增成员

}

⑵当派生类中含有对象成员时,其构造函数的一般形式为:

派生类::派生类构造函数名(参数表):基类构造函数名(参数表),对象成员名(参数表),……对象成员名n(参数表)

{//新增数据初始化(不包括对象成员)

}

2.多重继承

前面我们介绍的派生类只有一个基类,称为单基派生或单一继承。在实际运用中,我们经常需要派生类同时具有多个基类,这种方法称为多基派生或多重继承。

2.1多重继承的声明:

在C++中,声明具有两个以上基类的派生类与声明单基派生类的形式类似,只需将要继承的多个基类用逗号分开即可。

在多重继承中,公有派生和私有派生对于基类成员在派生类的可访问性与单继承的规则相同。

另外,对基类成员的访问必须是无二义的,若两个基类中具有同名的数据成员或成员函数,使用成员名限定来消除二义性,若派生类中新增成员或成员函数与基类成员或成员函数同名,则派生类会覆盖外层同名成员,也须使用作用域分辨符。

2.2多重继承的构造函数和析构函数:

多重继承的构造函数的定义形式与单继承构造函数的定义形式类似,只有n个基类的构造函数之间用“,”分隔。

多重继承的构造函数的执行顺序与单继承构造函数的执行顺序相同,也是遵循先执行基类的构造函数,再执行对象成员的构造函数,最后执行派生类构造函数的原则。在多个基类之间,则严格按照派生类声明是从左到右的顺序来排列先后。而析构函数的执行顺序与构造函数的执行顺序相反。

2.3虚基类:

如果某个派生类的部分或全部直接基类是从另一个共同的基类派生而来,在这些基类中,从上一级基类继承来的成员就有相同的名称,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性,此时,可定义虚基类。这就要求在其直接基类的定义中,使用关键字virtual将那个共同的基类定义为虚基类,其语法形式如下:

class 派生类名: virtual 派生方式 基类

虚基类的初始化与一般的多重继承的初始化在语法上是一样的 ,但构造函数的调用顺序不同,虚基类构造函数的调用顺序是这样规定的:

1)在同一层次中,先调用虚基类的构造函数,接下来依次是非虚基类的构造函数,对象成员的构造函数,派生类的构造函数。

2)若同一层次中包含多个虚基类,这些虚基类的构造函数按对他们说明的先后次序调用

3)若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类构造函数。

3.注意

1.基类向派生类提供它的行为和结构,派生类负责正确初始化基类对象

2.要用正确的参数调用直接基类的构造函数,以作为每个派生类构造函数的一部分(讨论)

3.普通成员函数不能用这种语法调用基类方法

4.类只负责其直接基类的构造。但存在虚基类时有所不同

5.派生类构造函数的参数要包括自己使用的和基类需要使用的所用参数

6.派生类继承基类的行为和结构,但不继承构造函数和析构函数

7.要在派生类拷贝构造函数中调用基类的拷贝构造函数

8.要在派生类赋值运算符中调用基类的赋值运算符

9. 派生类析构函数并不明确调用基类的析构函数

10. 所用虚基类都由最后的派生类的构造函数所初始化。当创建对象时,将忽略子对象构造函数内部对虚基类构造函数的调用。

11.公有继承是继承的主要模式,私有继承只在特殊情况下用(如实现堆栈类可从列表类中继承,但它不是某种列表,重新导出私有基类的成员。)私有继承没有多态性。

12.在单一继承能实现目的时,不要用多重继承

13.继承的优点:代码重用,在正在运行的程序中加入新类和新功能(如卫星、病人监护),动态联编,多态性。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有