版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章 继承与派生,本章要点,通过本章的学习,使读者: 理解基类和派生类的概念,理解继承是如何提高软件可重用性的 熟练掌握派生类的定义方法和应用 能够用多重继承多个基类派生出新类,6.1 继承与派生的概念,6.1.1 继承,继承允许在已有类的基础上创建新的类,新类可以从 一个或多个既有类中继承函数和数据,而且可以加入 新的函数和数据,6.1.2 派生,一个派生类可以从一个基类派生,也可以从多个基派 生。从一个基类派生的继承称为单继承;从多个基类 派生的继承称为多继承。图6-1反映了类之间继承和派 生的关系。,图6-1 类之间的继承与派生关系,6.2 基类和派生类,6.2.1 派生类的定义 C+
2、中定义派生类的语法格式如下:,class : protected: public: ;,【例6-1】圆Circle类继承点Point类。,#include iostream.h class Point float x,y; public: Point(float a=0,float b=0)x=a;y=b; void SetP(float a=0,float b=0)x=a;y=b; void Display() cout位置是:(x,y)n; ;,圆类,class Circle: public Point float r; public: Circle(float z=1,float x=0
3、,float y=0)r=z; void SetC(float z=1,float x=0,float y=0)r=z;SetP(x,y); void Print() cout圆的; Display(); cout圆的半径是:rendl; ;,圆类继承自点类,6.2.2 三种继承方式,6.3单继承,6.3.1 继承成员的访问权限 1公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类成员时,它们都保持原有的状态,而私有成员是不能被继承的。 2私有继承(private) 私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,所以派生类的其他成员可以访问它们,但是
4、在类外部通过派生类对象无法访问它们,3保护继承(protected) 保护继承的特点是基类的公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友员访问。,6.3.2 构造函数和析构函数,1构造函数 派生类构造函数的一般格式如下:,():() ;,在派生类构造函数的参数表中,给出了初始化基类数据和新增一般成员数据所需要的全部参数。,派生类的构造函数执行顺序如下: (1) 按被继承时说明顺序,调用基类的构造函数。 (2) 调用派生类构造函数体中的内容。,2析构函数 当对象被删除时,派生类的析构函数被执行。由于析构函数也不能被继承,因此在执行派生类的析构函数时,基类的析构函数也
5、将被调用。 执行顺序是:, 执行派生类的析构函数 执行基类的析构函数,其顺序与执行构造函数时的顺序正好相反,#include class A public: A( ) cout A Constructor endl; A( ) cout A Destructor endl; ; class B : public A public: B( ) cout B Constructor endl; B( ) cout B Destructor endl; ; void main( ) B b; cout“其它执行语句。” endl; ,分析该程序的输出结果 ?,6.4多继承,6.4.1多继承的概念 多
6、继承可以看作是单继承的扩展。所谓多继承是指派生类具有多个基类,派生类与每个基类之间的关系仍可看作是一个单继承。多继承机制如图6-5所示。,图6-5 多继承机制,多继承派生类的语法格式如下,class :, ;,#include class Base1 int b1; public: void setB1(int i) b1=i; void showB1() coutnb1=b1; ; class Base2 int b2; public: void setB2(int i) b2=i; void showB2()coutnb2=b2; ; class Derived : public Base
7、1, private Base2 /定义多基派生类Derived int d; public: void setD(int i, int j) d=i; setB2(j); void showD() showB2(); coutnd =d; ;,void main() Derived d; /定义 Derived 的对象 d d.setB1(15); d.showB1(); d.setD(37,49); d.showD(); /d.setB2(26); /d.showB2(); ,主函数,类定义,6.4.2多继承的构造函数,多继承的情况下,派生类的构造函数格式如下:,():(), ), (),
8、 , 先基类,后自己。即先执行基的构造函数,再执行派生类本身构造函数。 在同一层上的各基类构造函数,按派生时定义的先后次序执行。,多重继承的构造函数的调用原则,6.5 虚基类,6.5.1 作用域分辨符 作用域分辨符就是我们经常见到的“:”,它可以用来限制访问的成员所在的类的名称。 一般语法格式如下:,(1) 对象名.基类名:成员名; /数据成员 (2) 对象名.基类名:成员名(参数表);/成员函数,6.5.2 虚基类说明,虚基类在定义由基类直接派生的类时说明。说明格式如下:,class :virtual ,6.5.3 虚基类的构造函数,虚基类的初始化与一般的多继承的初始化在语法上是一样的,但构造函数的调用次序不同。 派生类构造函数调用的次序有以下原则:,(1) 虚基类的构造函数在非虚基类之前调用。 (2) 若同一层次中包含多个虚基类,这些 虚基类的构造函数按它们说明的次序调用。 (3) 若虚基类由非虚基类派生而来,则仍按 先调用基类构造函数,再调用派生类 中构造函数的执行顺序。,习题六,1派生类和基类是什么关系?如何定义一个类的派生类? 2如何确定派生类的访问控制?分别说
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡镇路长办工作制度
- ktv总台工作制度
- 农情信息员工作制度
- 临检实验室工作制度
- 养生店卫生工作制度
- 住酒店安全工作制度
- 三下乡支教工作制度
- 副会长联系工作制度
- 办公室电脑工作制度
- 动漫中奇葩工作制度
- GB/T 4623-2025环形混凝土电杆
- 装配式建筑碳核算 课件 第6章装配式建筑碳核算软件
- 【专家报告】河海大学郭苏:不同应用场景下多能互补综合能源系统优化关键技术研究
- 2025生物银行面试题目及答案
- 氟化工艺作业安全培训
- 资产减值准备管理办法
- 任务型阅读15篇-八年级英语下学期期末复习
- GB/T 45953-2025供应链安全管理体系规范
- 干部审计知识培训课件
- 2025年商标代理人业务水平考试题库附答案
- 化工储罐知识培训课件
评论
0/150
提交评论