C++语言程序设计(清华大学郑莉)07.ppt

上传人:王** 文档编号:168915 上传时间:2023-03-10 格式:PPT 页数:73 大小:601.50KB
下载 相关 举报
C++语言程序设计(清华大学郑莉)07.ppt_第1页
第1页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第2页
第2页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第3页
第3页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第4页
第4页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第5页
第5页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第6页
第6页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第7页
第7页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第8页
第8页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第9页
第9页 / 共73页
C++语言程序设计(清华大学郑莉)07.ppt_第10页
第10页 / 共73页
亲,该文档总共73页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C++语言程序设计(清华大学郑莉)07.ppt》由会员分享,可在线阅读,更多相关《C++语言程序设计(清华大学郑莉)07.ppt(73页珍藏版)》请在优知文库上搜索。

1、1第七章第七章 继承与派生继承与派生C+语言程序设计C+语言程序设计2本章主要内容本章主要内容l类的继承类的继承l类成员的访问控制类成员的访问控制l单继承与多继承单继承与多继承l派生类的构造、析构函数派生类的构造、析构函数l类成员的标识与访问类成员的标识与访问l深度探索深度探索C+语言程序设计3类的继承与派生类的继承与派生l保持已有类的特性而构造新类的过程保持已有类的特性而构造新类的过程称为继承。称为继承。l在已有类的基础上新增自己的特性而在已有类的基础上新增自己的特性而产生新类的过程称为派生。产生新类的过程称为派生。l被继承的已有类称为基类(或父类)。被继承的已有类称为基类(或父类)。l派生

2、出的新类称为派生类。派生出的新类称为派生类。C+语言程序设计4继承与派生问题举例继承与派生问题举例工具车轿车面包车小汽车卡车旅行车汽车汽车交通工具交通工具类的继承与派生C+语言程序设计5继承与派生问题举例继承与派生问题举例猴子猴子狮子虎猎豹猫猫鸟鸟动物动物类的继承与派生猫科猫科C+语言程序设计6继承与派生问题举例继承与派生问题举例圆圆矩形矩形几何形状几何形状类的继承与派生C+语言程序设计7继承与派生问题举例继承与派生问题举例兼职技术人员销售经理管理人员销售人员雇员类的继承与派生C+语言程序设计8继承与派生的目的继承与派生的目的l继承的目的:实现代码重用。继承的目的:实现代码重用。l派生的目的:

3、当新的问题出现,原有派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,程序无法解决(或不能完全解决)时,需要对原有程序进行改造。需要对原有程序进行改造。类的继承与派生C+语言程序设计9派生类的声明派生类的声明class 派生类名:派生类名:继承方式继承方式 基类名基类名 成员声明;成员声明;类的继承与派生C+语言程序设计10继承方式继承方式l三种继承方式三种继承方式 公有继承 私有继承 保护继承l不同继承方式的影响主要体现在:不同继承方式的影响主要体现在:派生类成员成员对基类成员的访问权限通过派生类对象对象对基类成员的访问权限类成员的访问控制C+语言程序设计11公有继承公有继承

4、(public)l基类的基类的public和和protected成员的访问成员的访问属性在派生类中属性在派生类中保持不变保持不变,但,但基类的基类的private成员成员不可不可直接直接访问访问。l派生类中的派生类中的成员函数成员函数可以直接访问基类可以直接访问基类中的中的public和和protected成员,但不能成员,但不能直接访问基类的直接访问基类的private成员。成员。l通过派生类的通过派生类的对象对象只能访问基类的只能访问基类的public成员。成员。类成员的访问控制C+语言程序设计12例例7-1 公有继承举例公有继承举例/基类基类PointPoint类的定义类的定义class

5、 Point class Point public:public:/公有函数成员公有函数成员void void initPointinitPoint(float x = 0, float y = 0) (float x = 0, float y = 0) this-x = x; this-y = y; this-x = x; this-y = y;void move(float void move(float offXoffX, float , float offYoffY) ) x += x += offXoffX; y += ; y += offYoffY; ; float float g

6、etXgetX() const return x; () const return x; float float getYgetY() const return y; () const return y; private:private:/私有数据成员私有数据成员float x, y;float x, y;类成员的访问控制class Rectangle: public Point class Rectangle: public Point /派生类定义部分派生类定义部分public:public:/新增公有函数成员新增公有函数成员void void initRectangleinitRecta

7、ngle(float x, float y, float w, (float x, float y, float w, float h) float h) initPointinitPoint(x, y); (x, y); /调用基类公有成员函数调用基类公有成员函数this-w = w;this-w = w;this-h = h;this-h = h; float float getHgetH() const return h; () const return h; float float getWgetW() const return w; () const return w; privat

8、e:private:/新增私有数据成员新增私有数据成员float w, h;float w, h;13#include #include #include #include using namespace std;using namespace std;intint main() main() Rectangle Rectangle rectrect; ;/定义定义RectangleRectangle类的对象类的对象/设置矩形的数据设置矩形的数据rect.rect.initRectangleinitRectangle(2, 3, 20, 10);(2, 3, 20, 10);rect.rect

9、.movemove(3,2);(3,2);/移动矩形位置移动矩形位置coutcout The data of The data of rectrect( (x,y,w,hx,y,w,h): ): endlendl; ;/输出矩形的特征参数输出矩形的特征参数coutcout rect.getXrect.getX() , () , rect.getYrect.getY() () , , rect.getWrect.getW() , () , rect.getHrect.getH() () w = w;this-w = w;this-h = h;this-h = h; void move(float

10、 void move(float offXoffX, float , float offYoffY) ) Point:move(Point:move(offXoffX, , offYoffY);); float float getXgetX() const () const return Point:return Point:getXgetX(); (); float float getYgetY() const () const return Point:return Point:getYgetY(); (); float float getHgetH() const return h; (

11、) const return h; float float getWgetW() const return w; () const return w; private:private:/新增私有数据成员新增私有数据成员float w, h;float w, h;类成员的访问控制#include #include #include #include using namespace std;using namespace std;intint main() main() Rectangle Rectangle rectrect; ; /定义定义RectangleRectangle类的对象类的对象r

12、ect.rect.initRectangleinitRectangle(2, 3, 20, 10);(2, 3, 20, 10); /设置矩形的数据设置矩形的数据rect.rect.movemove(4,2);(4,2); /移动矩形位置移动矩形位置coutcout The data of The data of rectrect( (x,y,w,hx,y,w,h): ): endlendl; ;coutcout rect.rect.getXgetX() , () , /输出矩形的特征参数输出矩形的特征参数 rect.rect.getYgetY() , () , rect.rect.getWg

13、etW() , () , rect.rect.getHgetH() () endlendl; ;return 0;return 0; 17The data of rect(x,y,w,h):6, 5, 20, 10Press any key to continueC+语言程序设计18保护继承保护继承(protected)l基类的基类的public和和protected成员都以成员都以protected身份出现身份出现在派生类中,但在派生类中,但基类的基类的private成员成员不可直接访问不可直接访问。l派生类中的派生类中的成员函数成员函数可以直接访问基可以直接访问基类中的类中的public和

14、和protected成员,但成员,但不能直接访问基类的不能直接访问基类的private成员。成员。l通过派生类的通过派生类的对象对象不能直接访问基类不能直接访问基类中的任何成员中的任何成员类成员的访问控制C+语言程序设计19protected 成员的特点与作用成员的特点与作用l对建立其所在类对象的模块来说,它对建立其所在类对象的模块来说,它与与 private 成员的性质相同。成员的性质相同。l对于其派生类来说,它与对于其派生类来说,它与 public 成成员的性质相同。员的性质相同。l既实现了数据隐藏,又方便继承,实既实现了数据隐藏,又方便继承,实现代码重用。现代码重用。类成员的访问控制C+

15、语言程序设计20例例7-3 protected 成员举例成员举例class A class A protected:protected:intint x; x;intint main() main() A A a a; ;a.xa.x = 5; / = 5; /错误错误 类成员的访问控制class A class A protected:protected:intint x; x;class B: public Aclass B: public Apublic:public:void function();void function();void B:function() void B:fun

16、ction() x = 5; /x = 5; /正确正确 21void main() B b; b.x=5; C+语言程序设计22类型兼容规则类型兼容规则l一个公有派生类的对象在使用上可以一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具被当作基类的对象,反之则禁止。具体表现在:体表现在: 派生类的对象可以隐含转换为基类对象。 派生类的对象可以初始化基类的引用。 派生类的指针可以隐含转换为基类的指针。l通过基类对象名、指针只能使用从基通过基类对象名、指针只能使用从基类继承的成员类继承的成员类型兼容C+语言程序设计23例例7-4 类型兼容规则举例类型兼容规则举例#include #include using namespace std;using namespace std;class Base1 /class Base1 /基类基类Base1Base1定义定义public:public:void display() void display() constconst coutcout Base1:display() Base1:display() endlendl; ;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!