面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第九讲

上传人:E**** 文档编号:89434503 上传时间:2019-05-25 格式:PPT 页数:25 大小:790KB
返回 下载 相关 举报
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第九讲_第1页
第1页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第九讲_第2页
第2页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第九讲_第3页
第3页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第九讲_第4页
第4页 / 共25页
面向对象程序设计与C++语言 第二版  教学课件 ppt 作者  杨庚 王汝传 叶晓国 第九讲_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第九讲》由会员分享,可在线阅读,更多相关《面向对象程序设计与C++语言 第二版 教学课件 ppt 作者 杨庚 王汝传 叶晓国 第九讲(25页珍藏版)》请在金锄头文库上搜索。

1、第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,第九讲 派生与继承性,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,派 生 类 (derived class),为什么引入派生类 自然地表示现实世界,是复杂的系统层次化,提高代码的重用性,增强语言功能,提高软件开发效益.,例如关于雇员和车辆的层次关系:,Teacher(教师),Officer(行政),Worker(工人),Employee(雇员),Car(汽车),Sportscar(赛车),Vehicle(车辆),第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的

2、派生,派生类定义方式 class base public: protected: private: ; public class derivedName: protected base private,public、protected 和 private分别表示公有继承、保护继承和私有继承,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,例1 基类车辆vehicle.h (因篇幅所限,我们 将类的实现放到头文件之中),#include class vehicle public: private: ;,vehicle(int aw, int ats, float a

3、p) :weight(aw),topspeed(ats),price(ap) void print( ) cout “n weight:“ weight “pds“; cout “n top speed:“ topspeed “mph“; cout “n price: $ “ price;,int weight; /重量 int topspeed; /最高速度 float price; /价格,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,/公有派生类汽车 car.h,#include “ vehicle.h“ class car : public vehicl

4、e public: private: ;,car(int aw, int ats, float ap, int anc, int ahp) :vehicle(aw,ats,ap), numbercylinders(anc) , horsepower(ahp) void print( ) vehicle:print( ); /调用基类的函数 cout “n cylinders:“ numbercylinders; cout “n horsepower:“ horsepower;,int numbercylinders; /汽缸数 int horsepower; /马力,第5章 派生与继承性,5.

5、1 派生类 5.2 多重继承 5.3 类模板的派生,/应用程序 main.cpp,#include “ vehicle.h “ void main ( ) vehicle av(15000, 60, 300000); /创建对象 car ac(3500, 100, 12000, 6, 120);/创建对象 av.print( ); /调用基类函数 ac.print( ); /调用派生类函数 ,结果: weight: 15000 pds top speed: 60 mph price $300000.00 weight: 3500 pds top speed: 100 mph price $12

6、000.00 cylinders: 6 horsepower: 120,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,例 1 有关内容总结,1. 在已有的类中加入新功能而创建的类称 为原有类的派生类。,2. 继承的方式有三种:公有、保护、私有。 一般为公有或保护,3. 继承类具有基类的所有成员,并可对已 有的成员进行重新定义。在派生类中访 问基类的函数用:表明,如在 car 中有: vehicle:print( );,4. 问题 派生类 的构造函数的定义? 派生类对基类的访问权限?,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,派

7、生类与基类的构造函数,1。派生类的构造函数自动执行基类的构 造函数,且基类的构造函数先执行。,2。派生类的构造函数可不显式地写出基类 的构造函数,此时调用基类的无参数构 造函数,但若要传递参数,必须写出 如:car(int aw, int ats, float ap, int anc, int ahp) :vehicle(aw,ats,ap), numbercylinders(anc) , horsepower(ahp) 创建对象: vehicle av(15000, 60, 300000); car ac(3500, 100, 12000, 6, 120);,第5章 派生与继承性,5.1 派

8、生类 5.2 多重继承 5.3 类模板的派生,派生类对基类成员的访问规则,3. 外部访问:由友元、继承类函数等访问,访问有三种类型: 1. 内部访问:由类自己的函数访问,如前例 类vehicle 中的函数 print void print( ) cout “n weight:“ weight “pds“; cout “n top speed:“ topspeed “mph“; cout “n price: $ “ price; ,2. 类的对象访问:由类创建的对象访问。 vehicle av(15000, 60, 300000); /创建对象 av.print( ); /调用基类函数,第5章

9、派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,公有派生类对基类成员的访问规则,1. 基类的私有数据。 内部访问 OK 对象访问 NON 外部访问 友元OK,继承类NON,2. 基类的保护数据。 内部访问 OK 对象访问 NON 外部访问 友元OK,继承类OK,3. 基类的公有数据。 内部访问 OK 对象访问 OK 外部访问 友元OK,继承类OK,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,例2. 类point 和 cercle,/save as point.h class point public: /公有成员 point( ); /缺

10、省构造函数 point(float x1, float y1);/带参数构造函数 point( const point /点的纵坐标 ; /类定义结束,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,/save as point.cpp #include “ point.h “ point:point( ) x=0; y=0; /缺省构造函数 point:point(float x1, float y1)/参数构造函数 x=x1; y=y1; point:point(const point ,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的

11、派生,/继承类circle #include #include “point.h ” class circle:public point public: circle(float a, float b, float r): point(a,b) radius = r; void show( ) cout x “, “ y endl; point:show( ); cout “ radius= “ radius endl; ;,private: float radius;,/,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,/save as main.cpp #in

12、clude “ circle.h “ void main( ) circle c1(2, 2, 4); /调用参数构造函数 c1.show( ); /打印圆的半径和圆心 cout c1.radius; cout x; ,结果:Point(x,y)=(2,2) radius=4,/ 不能访问私有数据 / 不能访问私有数据,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,例 2 有关内容总结,1. 明确继承类构造函数与基类构造函数的 关系及实现。,2. 明确内部访问、对象访问与外部访问的权 限。特别是继承类对基类成员的访问。,3. 继承类具有基类的所有成员,并可对已

13、有的成员进行重新定义。在派生类中访 问基类的函数用:表明,如在 car 中有: point:show( );,4. 面向对象技术中的基本特征:类与继承 在C+中的实现,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,多重继承,问题的提出 单继承中,基类只有一个, 如果一个类由多个基类继承 而来,该任何定义?,teacher(教师),sudentr(学生),data_rec(信息记录),t_postgra(在职研究生),Postgra(研究生),例如学校人员分类的层次关系:,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,问题: tea

14、cher 和 student都是data_rec的继承类,它们都有基类的所有成员,即有一个基类成员的拷贝。t_postgra分别是teacher 和student的继承类,所以,它具有两者的一个拷贝,即有两个data_rec的拷贝=数据冗余,解决的办法:虚基类 对多继承的派生类,它将只保持一个基 类的成员拷贝,实现办法:在继承的基类前加关键字 virtual class devried:virtual baseClass.,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,例3:学校人员分类描述,有类 data_rec, teacher, student, post

15、gra, tpost. 文件为univ.h,#include #include class data_rec public: data_rec( ) name=null; void insert_name( char *na) delete name; name=new charstrlen(na)+1; strcpy(name, na); void print ( ) cout “n name:“ name; private: char *name; ;,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,/定义派生类 student class student:virtual public data_rec public: student( ):data_rec( ) id=0; /构造函数 void insert_id(int pid) id=pid; void print ( ) data_rec:print( ); /访问基类的函数 cout “n id=“ id; ,private: int id; ;,第5章 派生与继承性,5.1 派生类 5.2 多重继承 5.3 类模板的派生,/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号