




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++面向对象程序设计(第二版)
主编曹静中国水利水电出版社C++面向对象程序设计(第二版)
第五章
类的继承与派生13一月2023C++面向对象程序设计第五章
类的继承与派生5.1继承与派生5.2继承的三种方式5.3派生类的构造函数和析构函数5.4多继承和虚基类5.5赋值兼容规则13一月2023C++面向对象程序设计5.1继承与派生5.1.1基类与派生类5.1.2派生类的声明5.1.3派生类生成过程13一月2023C++面向对象程序设计5.1.1基类与派生类以原有的类为基础产生新类,我们就说从原有的类派生出新类。在这个过程中原有的类称为基类,新类称为派生类。汽车类派生出卡车类。在此过程中,我们称汽车类为基类,卡车类为汽车类的派生类。面向对象程序设计提供了类的继承机制,该机制自动的为派生类提供了其基类的操作和属性,大大的提高了代码的重用率。13一月2023C++面向对象程序设计5.1.2派生类的声明C++中声明派生类的形式为:声明中的“基类名”是已经存在的类的名称,“派生类名”是在已存在的类的基础上通过添加成员而得到的新类。当派生类只有一个直接基类的继承情况,称为单继承。当派生类同时有多个基类的继承情况,称为多继承。class派生类名:继承方式基类名1,继承方式基类名2,…,继承方式基类名n{
派生类的成员声明;};13一月2023C++面向对象程序设计5.1.3派生类生成过程派生类生成过程中需要指定派生类的类名,继承方式和新增成员。派生类的生成过程可分为三个步骤:吸收基类成员﹑改造基类成员和添加新的成员。吸收基类成员:将基类除构造函数和析构函数以外的成员全部接受。改造基类成员:根据继承方式决定基类成员在派生类中的访问控制问题。添加新的成员:派生类新增成员是派生类不同于基类的地方,也是继承和派生机制的关键所在。13一月2023C++面向对象程序设计5.2继承的三种方式5.2.1公有继承5.2.2私有继承5.2.3保护继承13一月2023C++面向对象程序设计5.2.1公有继承类的继承方式为公有继承的时候,基类的公有和保护成员在派生类中访问权限不变,而基类的私有成员在派生类中不可直接访问。公有继承的应用举例。
classCircle:publicPoint{private:
floatr;public:
voidStart(floatX,floatY,floatR){Point::Start(X,Y);r=R;} floatGetR(){returnr;}};13一月2023C++面向对象程序设计5.2.2私有继承类的继承方式为私有继承的时候,基类中的公有和保护成员被吸收后成为派生类的私有成员,而基类的私有成员在派生类中不可直接访问。私有继承应用举例。classCircle:privatePoint{private:
floatr;public:voidStart(floatX,floatY,floatR){Point::Start(X,Y);r=R;} floatGetX(){returnPoint::GetX();} floatGetY(){returnPoint::GetY();}};13一月2023C++面向对象程序设计5.2.3保护继承当类的继承方式为保护继承的时候,基类中的公有和保护成员被吸收后成为派生类的保护成员,而基类中的私有成员在派生类中不可直接访问。保护继承的例子。classCircle:protectedPoint{private:floatr;public:voidStart(floatX,floatY,floatR){Point::Start(X,Y);r=R;} floatGetR(){returnr;} floatGetY(){returnPoint::GetY();}};13一月2023C++面向对象程序设计5.3派生类的构造函数和析构函数5.3.1构造函数5.3.2析构函数13一月2023C++面向对象程序设计5.3.1构造函数派生类对象在定义的时候必须调用派生类的构造函数进行初始化工作,也就是为派生类对象的数据成员赋初值。构造函数的作用是在对象被创建时用特定的方式构造对象,将对象初始化为一个特定的状态,使此对象具有区别于其它对象的特征。派生类对象的数据成员包括从基类继承的数据成员和派生类新增的数据成员,如果派生类有内嵌对象作为数据成员,那么派生类的数据成员还包括内嵌对象的数据成员。派生类对象定义的时候,构造函数需要完成上述数据成员的初始化工作。派生类构造函数声明一般语法如下:13一月2023C++面向对象程序设计5.3.1构造函数派生类类名::派生类类名(参数列表):基类名1(参数列表1),…基类名m(参数列表m),
内嵌对象名1(内嵌对象参数列表1),……内嵌对象n(内嵌对象参数列表n){派生类新增成员的初始化;}派生类构造函数初始化时先调用基类构造函数完成从基类继承数据成员的初始化,接着调用内嵌对象的构造函数完成内嵌对象数据成员的初始化,最后才调用派生类构造函数完成新增数据成员的初始化。13一月2023C++面向对象程序设计5.3.1构造函数派生类构造函数应用举例。classGraduateStudent:
publicStudent{protected: intgCount;public: GraduateStudent(intgN,floatgG,intgC):
Student(gN,gG) { cout<<"ConstructingGraduateStudent\n"; gCount=gC; }};13一月2023C++面向对象程序设计5.3.2析构函数派生类的析构函数是在派生类对象生命期结束之前对派生类新增的数据成员完成必要的清理工作。析构函数的作用与构造函数几乎正好相反,它在对象删除前被自动调用,来完成一些清理工作,也就是一些扫尾工作。派生类析构函数执行顺序和构造函数刚好相反:首先对派生类新增一般数据成员进行清理工作,接着对派生类内嵌对象成员进行清理工作,最后才是对基类继承的成员进行清理。这一点,大家可以根据栈区“先进后出”的特性来理解。13一月2023C++面向对象程序设计5.3.2析构函数派生类析构函数应用举例。classGraduateStudent:publicStudent{protected: intgCount;public: ~GraduateStudent() { cout<<"DestructingGraduateStudent\n"; }};13一月2023C++面向对象程序设计5.4多继承和虚基类5.4.1派生类成员的标识与访问5.4.2作用域分辨5.4.3多继承和虚基类5.4.4虚基类及其派生类的构造函数13一月2023C++面向对象程序设计5.4.1派生类成员的标识与访问派生类吸收了基类除构造函数和析构函数以外的所有成员,并添加新成员得到的类。按照派生类对象能否直接访问可以把派生类数据成员分为两种。可见成员。派生类的可见成员也就是派生类的公有成员:派生类从基类继承的公有成员和派生类新增的公有成员.不可见成员。派生类的不可见成员就是派生类的私有成员和保护成员:派生类从基类继承的私有、保护成员和派生类新增的私有、保护成员。13一月2023C++面向对象程序设计5.4.2作用域分辨作用域分辨解决的是派生类中的同名覆盖现象。派生类声明了和基类同名的新成员(如果是函数成员则所带参数必须相同,否则就是函数重载),派生类的新成员就覆盖了从基类继承的同名成员。直接访问只能访问派生类新增成员。为了能够访问基类同名成员,我们采用了作用域分辨符来完成这个任务。作用域分辨符的使用形式:
基类名::成员名;//数据成员基类名::成员名(参数表);//函数成员13一月2023C++面向对象程序设计5.4.3多继承和虚基类多继承是指一个派生类同时有多个直接基类,即一个派生类对象含有多个基类数据成员的拷贝。由于多层次的交叉派生关系,多继承中一个派生类可能保留某个基类的多个实例。虚基类就是为了解决多继承时一个派生类可能保留某个基类多个拷贝的问题。采用虚基类的派生方式保证了在多继承中某个基类的拷贝只出现一次。13一月2023C++面向对象程序设计5.4.4虚基类及其派生类的构造函数如果虚基类定义有带参数的构造函数,那么派生类一定要定义带参数的构造函数。如果派生类对象中含有从虚基类继承来的成员,则虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数,进行初始化。13一月2023C++面向对象程序设计5.5赋值兼容规则赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的对象来替代。在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。赋值兼容规则替代的几种情况:
派生类的对象可以赋值给基类对象。派生类的对象可以初始化基类的引用。派生类的对象的地址可以赋给指向基类的指针。13一月2023C++面向对象程序设计5.5赋值兼容规则赋值兼容规则应用举例。class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财税筹划与税务筹划顾问服务合同
- 互联网教育循环额度信用借款协议范本
- 智能制造场咨询服务协议
- 移离保全标的物申请书
- 监理专用表格汇编
- 公私账户集中管理制度
- 列车餐车夜班管理制度
- 出海作业用具管理制度
- 中西结合医院消防水池基坑支护设计报告
- 垃圾分类存储管理制度
- 2025年见证取样员必考题库与答案
- 执行四方协议书范本范本
- 鲁教版五四制初中八年级化学全一册全套教案
- 科技赋能娃娃玩具个性化定制
- 《边教书边成长》读书分享课件
- 以上由自治区教育科学规划办填写内蒙古自治区教育科学“十四五”规划课题立项申请评审书
- 骨髓腔输液技术教案输液通路与监护P页
- 青少年无人机课程:第一课-马上起飞
- 顺义区六年级下学期语文期末试卷
- 2024年江苏省南京市玄武区中考英语二模试卷
- 2.2 社会主义制度在中国的确立(课件)-2024-2025学年高中政治必修一 中国特色社会主义 (统编版 )
评论
0/150
提交评论