版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章第四章 复习课复习课什么是继承什么是继承, ,为什么要继承为什么要继承 继承是事物发展的过程,通过继承,使后代继承了父辈的一切优秀的品质,并在该品质上又进一步发展形成了超越父辈的品质和能力机动性机动性,超音速机动性,超音速,隐型继承的意义继承的意义 人类的发展离不开继承,如果不使用继承,则知识无法传承、经验无法延续,更不要说站在前人的肩膀上再进一步的愿望。 继承-获得前人的知识和经验 继承-在前人的基础上继续发展继承的概念继承的概念 继承是现实生活中的经常使用的术语.例如:孩子继承其父母的特征.继承意味着某人或某物从另一个人或实体中派生出一组属性.类似的,在C+中一个类也可以从另一个类继
2、承或派生,从一个旧类派生一个新类的过程称为继承 继承或派生另一个类的类叫派生类,而派生出这个派生类的类叫作基类.派生类的每个实例包括了基类的大多数属性;因此,派生类与其基类相比有更大的属性集.然而,派生类能够修改基类的部分或者全部属性.因此,继承使代码的重用性更加容易实现 一旦定义并测试过一个基类,就不需要修改它了,但是其他程序员可以调整它以满足他们的需要.从现有类派生一个新类允许重新定义其基类的成员函数,还允许向派生类添加新成员,基类不需要重新编译,它在继承的过程中保持不变,重用现有代码可以节省时间和精力,还能保证程序的可靠性继承的特征继承的特征继承是允许重用现有类来构造新类的特性基类方法和
3、属性派生类基类属性基类方法+ 附加属性附加方法优点优点( (一一) ) 使代码具有可重用性通过继承类库拥有类库的能力-用别人的类为基础创建自己需要的类,可以省时省力 可以重定义基类的成员函数,实现新的功能-对别人的类中的不足重新实现,但是又不改变别人的类. 向派生类添加新成员,实现功能发展和扩展-基于对别人的类的基础上,实现新的类,当然,新类必须具备上一代类所不具备的能力 不需要了解核心技术的细节,就能拥有别人的能力-简单的继承别人的类,可以不需要了解其功能的实现细节,就可以直接使用单一继承单一继承AB多重继承多重继承 ABC基本语法class 派生类:访问控制说明符 基类例如: class
4、Manager : public Employee访问控制说明符有三种类型:public,private,protected,它们说明了派生类对基类属性继承的3种方式访问控制说明符的规则访问控制说明符的规则 不管存在继承继承与否 类成员总是能够被它们自己的类的方法访问 公有成员可以在任何地方(类函数和类对象)被访问 保护成员和私有成员不能被类对象访问#include#includeusing namespace std;class Apublic:void show()coutprivA;protA;pubAendl;private:int privA;protected:int protA;
5、public:int pubA;int main()A a;/a是类是类A的对象的对象a.show ();/对象对象a访问类的共有函数,正确访问类的共有函数,正确a.privA ;/对象对象a访问类的私有变量,错误访问类的私有变量,错误tA ;/对象对象a访问类的保护变量,错误访问类的保护变量,错误a.pubA ;/对象对象a访问类的共有变量,正确访问类的共有变量,正确 return 0; 当存在继承关系时,访问控制规则如下基类成员公有继承私有继承保护继承公有公有私有保护保护保护私有保护私有不被继承不被继承不被继承滤镜滤镜太阳太阳地球地球publicprivate protected
6、 public公有派生(不改变基类成员)#includeclass Aprivate:int privA;protected:int protA;public:int pubA;/通过公有派生的类通过公有派生的类class B:public A public:void fn()int a;a = privA; /错误错误a = protA;a = pubA;public: int pubA;protected: int protA;void main()B obj1; /派生类的对象派生类的对象obj1.privA = 1; /错误错误tA = 1; /错误错误obj1.pub
7、A = 1;protectedprivate protected public保护派生(改变基类公有成员为保护)#includeclass Aprivate:int privA;protected:int protA;public:int pubA;/通过保护派生的类通过保护派生的类class C:protected A public:void fn()int a;a = privA; /错误错误a = protA;a = pubA;protected: int pubA; int protA;void main()C obj2; /派生类的对象派生类的对象obj2.privA = 1; /错
8、误错误tA = 1; /错误错误obj2.pubA = 1; /错误错误privateprivate protected public私有派生(改变基类公有和保护成员为私有)#includeclass Aprivate:int privA;protected:int protA;public:int pubA;/通过公有派生的类通过公有派生的类class D:private A public:void fn()int a;a = privA; /错误错误a = protA;a = pubA;private: int pubA; int protA;void main()D ob
9、j3; /派生类的对象派生类的对象obj3.privA = 1; /错误错误tA = 1; /错误错误obj3.pubA = 1; /错误错误访问控制访问控制基类成员公有继承私有继承保护继承公有公有私有保护保护保护私有保护私有不被继承不被继承不被继承构造函数在继承中的作用 构造函数是用于将类构造成对象时用来使用的 继承表面上看是类的继承,但是实际上,继承是发生在对象层次上的属性和行为的传承,毕竟只有对象才具有现实意义。 在继承过程中,父类对象和子类对象将同时存在,我们不可能,也不会看到,没有父类对象的子类对象,毕竟必须先有鸡再有蛋继承中的构造函数 先调用基类的构造函数,然后调用
10、派生类的构造函数class Baseprotected: int a;public: Base()a = 0;/默认构造函数默认构造函数 Base(int c) a = c; /单参数构造函数单参数构造函数;class Derived : public Basepublic: Derived(): Base() /默认构造函数默认构造函数 Derived(int c): Base(c) /单参数构造函数单参数构造函数; 当声明派生类的对象时,Derived obj; 它将会首先调用基类的构造函数,然后调用派生类的构造函数 基类构造函数是在派生类构造函数之后指定的,使用冒号分隔Derived()
11、: Base() 在派生类的构造函数调用中显式选择基类的构造函数,如果不指定,派生类将会自己选择基类的默认构造函数Derived obj1(20);调用基类中的相应构造函数Derived(int c): Base(c);派生类的参数C不仅给派生类用,还要作为基类构造函数的参数显示调用基类构造函数#include class Base public:int zz;Base(int a)zz = a;class Derived: public Base public:int ss;Derived(int a,int b):Base(b)ss = a;void main() Derived obj1
12、(30,40);coutnobj1.ss; coutnobj1.zz;结果结果:40 30继承中的构造函数和析构函数class basepublic:base()coutn调用基类的构造函数调用基类的构造函数;base()coutn调用基类的析构函数调用基类的析构函数;class derived:public basepublic:derived()coutn调用派生类的构造函数调用派生类的构造函数;derived()coutn调用派生的析构函数调用派生的析构函数;void main()derived d;继承中的析构函数 调用顺序与构造函数的调用顺序相反 首先调用派生类的析构函数,然后调用基
13、类的析构函数 只有派生类的构造函数通过动态内存管理分配了内存空间时才需要定义析构函数 如果派生类的构造函数没有动态内存分配,那么派生类的析构函数可以是一个空函数调用成员函数 派生类的成员函数可以和基类中的成员函数同名 用基类的对象调用函数时,将调用基类的函数 使用派生类的对象时,将调用派生类的函数 派生类的成员函数要调用基类的同名函数,必须使用作用域解析操作符 假设一个函数在基类中存在而在派生类中不存在。那么这个函数既能够使用基类对象来调用,也能够使用派生类对象来调用函数覆盖 为了能使基类中过时的方法能被修改,我们可以在派生类中定义与基类中完全相同的函数,这叫做函数覆盖 派生类的函数覆盖基类的
14、同名函数 通过派生类的对象调用时,执行派生类的函数 用基类的对象调用时,执行基类的函数例子(一) 设计类Employee,它包含私有数据成员姓名,员工号,头衔和部门 设计Employee类的一个派生类Manager类,它包含附加私有数据成员额外津贴,和所管理的员工人数 设计Employee派生类Secretary类,它包含一个附加数据成员,用于指定他汇报数据的经理姓名. 姓名姓名员工号员工号头衔头衔部门部门Employee额外津贴额外津贴管理人数管理人数Manager所属上级所属上级Secretary例子(二) 为Employee类定义一个带有4个参数的构造函数 为Manager类定义一个带有6个参数的构造函数,其中4个参数用来调用父类构造函数 为Secretary类定义一个带有5个参数的构造函数,其中4个参数用来调用父类构造函数 每个构造函数里必须有cout的提示,如:cout“调用Employee类的构造函数”endl; 为Employee类定义一个析构函数 为Manager类定义一个析构函数 为Secretary类定义一个析构函数 每个析构函数里必须有cout的提示,如: cout“调用Employee
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 店长年度感悟总结
- 建议书范文(共2篇)
- 模板施工专项方案范例
- 租房合同简易版
- (一模)长春市2025届高三质量监测(一)物理试卷
- 五四制六年级英语单词表
- 山东省聊城市(2024年-2025年小学五年级语文)人教版随堂测试(上学期)试卷及答案
- 2024年福特小型车项目资金筹措计划书代可行性研究报告
- 2024年盘碟托盘项目资金需求报告代可行性研究报告
- 2024-2025学年天津市南开中学高三上学期10月月考化学试题及答案
- T-SZHW 001-2024 深圳市城市管家服务管理规范(试行)
- 益母草化学成分与药理作用研究进展
- 五年级上册小数乘除口算练习400题及答案
- 中阮谱大全(24首)
- 海关代购整治方案
- 新生儿肛管排气
- 公安情报分析报告
- 经济思想史知识点总汇
- 三废环保管理培训
- 冷库建设项目总结汇报
- 2024年核苷酸二钠(I+G)行业分析报告及未来发展趋势
评论
0/150
提交评论