清华大学出版社钱能课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《清华大学出版社钱能课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学出版社 课件
- 资源描述:
-
1、清华大学出版社 钱 能讲师:曹晓丽16.1 继承的概念16.2 继承的工作方式16.3 派生类的构造16.4 继承与组合16.5 多态性16.6 多态的思考方式16.7 不恰当的虚函数16.8 虚函数的限制16.9 虚函数的限制16.10 类的冗余16.11 客服冗余带来的问题16.12 类的分解16.13 抽象类16.14 有抽象类派生具体类16.15 纯虚函数的需要小结教学目标:能利用继承现有的类建立新类理解继承如何提高软件的重用性理解多态性对于继承的意义掌握多态的工作原理理解抽象类和具体类的区别学会运用纯虚函数基类(父类)派生类(父类)祖先类继承是我们理解事物,解决问题的方法;通过继承,
2、可以从已有的类派生出新类,新类继承父类的属性和操作,并在已有类的基础上新增自己的属性和操作,剔除那些不适合于其用途的继承下来的操作;被继承的已有类称为基类(父类),派生出的新类称为派生类(子类);继承可以减少代码的冗余性,实现代码的重用,并且通过作少量的修改,满足不断变化的具体应用要求,提高程序设计的灵活性;派生类的定义class 派生类名:继承方式 基类名1,成员定义;基类与派生类的关系是相对的;多继承:一个派生类有多个直接基类;单继承:一个派生类只有一个直接基类;例如:现有一个学生类Student,要增加研究生类GraduateStudent。由于研究生除了他自己特有的性质外,具有学生的所
3、有性质,所以我们用继承的方法来重用学生类。Ch16_1.cppclass Student /;class GraduateStudent:public Student /;StudentGradusteStudent#include#includeclass Advisor int noOfMeeting;class Studentpublic:Student(char*pName=no name)strncpy(name,pName,sizeof(name);average=semesterHours=0;void addCourse(int hours,float grade)averag
4、e=(semesterHours*average+grade);/总分 semesterHours+=hours;/总修学时 average/=semesterHours;/平均分 int getHours()return semesterHours;float getAverage()return average;void display()cout name=name,hours=semesterHours ,average=average endl;protected:char name40;int semesterHours;float average;class GraduateSt
5、udent:public Studentpublic:getQualifier()return qualifierGrade;protected:Advisor advisor;int qualifierGrade;void main()Student ds(Lo lee undergrade);GraduateStudent gs;ds.addCourse(3,2.5);ds.display();gs.addCourse(3,3.0);gs.display();运行结果:name=Lo lee undergrade,hours=3,average=0.833333name=“no name,
6、hours=3,average=1继承方式继承方式指定了派生类成员以及类外对象对继承来的成员的访问权限。三种继承方式:公有继承(public);保护继承(protected);私有继承(private);派生类不继承基类的构造函数和析构函数,但是能调用基类的构造函数和析构函数;派生类的构造函数总是先调用基类的构造函数来初始化派生类中的基类成员,再进行派生类中成员的初始化;派生类构造函数的定义中,要提供基类构造函数所需要的参数。如果派生类没有用户自定义的构造函数,执行其默认构造函数时,首先调用基类的构造函数;析构函数的调用顺序和构造函数的调用顺序相反;子类的构造函数要有一个默认的父类的构造函数对
7、应class Basepublic:Base(int i);Base();void print();private:int a;class Derive:public Basepublic:Derive(int i,int j);Derive();void print();private:int b;Base:Base(int i)a=i;cout Base constructor endl;Base:Base()cout Base destructor endl;void Base:print()cout a endl;Derive:Derive(int i,int j):Base(i)b=
8、j;cout Derive constructor endl;Derive:Derive()cout Derive destructor endl;void Derive:print()Base:print();cout b endl;:a(i)void main()Derive d(2,5);d.print();Base constructorDerive constructor25Derive destructorBase destructorclass Basepublic:Base();Base(int i);.;class Derive:public Basepublic:Deriv
9、e(int i,int j).;class Basepublic:Base()cout Base constructor endl;Base()cout Base destructor endl;void print();class Derive:public Basepublic:void set(int i)b=i;void print()cout b endl;private:int b;void main()Derive d;d.set(2);d.print();Base constructor2Base destructor组合:一个类的数据成员是另一个类的对象;继承和组合都利用了已
10、经定义的类,但是类之间关系上有差别;继承时子类享有父类的一切待遇,父类能出现的地方,子类同样可以出现,如汽车是车辆的子类,继承了车辆所有属性;而组合说明一个类只是另一个类的成员,不能代表类本身,汽车包含有一个马达,但马达不是汽车,汽车也不是马达。构造函数的调用顺序:调用基类构造函数;调用各成员对象的构造函数,调用顺序按照它们在类中声明的顺序。执行派生类的构造函数体中的内容;class Baseint a;public:Base(int i)a=i;cout Base constructor endl;Base()cout Base destructor endl;void print()cou
11、t a endl;class Memberint b;public:Member(int j)b=j;cout Member constructor endl;Member()cout Member destructor endl;void print()cout b endl;class Derive:public Baseint c;Member mem;public:Derive(int i,int j,int k):mem(j),Base(i)c=k;cout Derive constructor endl;Derive()cout Derive destructor endl;voi
12、d print()Base:print();mem.print();cout c endl;void main()Derive d(2,3,4);d.print();Base constructorMember constructorDerive constructor234Derive destructorMember destructorBase destructorclass Baseint a;public:Base(int i):a(i);class Derive:public Baseint b;public:Derive(int i):b(i*15),Base(b);void m
展开阅读全文