程序设计基础-继承机制

上传人:bin****86 文档编号:54842173 上传时间:2018-09-20 格式:PPT 页数:89 大小:339.50KB
返回 下载 相关 举报
程序设计基础-继承机制_第1页
第1页 / 共89页
程序设计基础-继承机制_第2页
第2页 / 共89页
程序设计基础-继承机制_第3页
第3页 / 共89页
程序设计基础-继承机制_第4页
第4页 / 共89页
程序设计基础-继承机制_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《程序设计基础-继承机制》由会员分享,可在线阅读,更多相关《程序设计基础-继承机制(89页珍藏版)》请在金锄头文库上搜索。

1、1,程序设计是计算机学科的,核心和灵魂,程序设计基础,第七章 继承机制,2,继承机制的作用继承成员的访问控制规则继承成员的调整类型兼容性类层次中的构造函数与析构函数多重继承重复继承,3,7.1 继承的基本概念,7.1.1 IS-A关系 IS-A关系:组织和表达知识,将知识组织成为一种有层次、可分类的结构。鸭梨是一种(IS-A)梨。 鸭梨具有梨都具有的特征; 鸭梨与其他梨有不同的特征。动物分类:界(kingdom)、门(phylum)、纲(class)、目(order)、科(family)、属(genus)、种(species)。,4,7.1 继承的基本概念,7.1.2 继承机制 继承(inhe

2、ritance):在一个类或若干已知类的基础上,经过适当的修改、扩充构成一个新类,这个新类具有原来作为基础类的特征。继承是面向对象程序所特有的特征。如果类B继承类A,则类B自动包括了类A中定义的数据成员和成员函数,还可定义类B自己的成员;称类A为类B的父类(parent)、超类(super-class)或基类(base);类B称为类A的子类(child)或派生类(derived-class);祖先类(ancestor):包括了其父类及其父类的祖先类。后代类(descendant):包括了其子类以及子类的后代类。,5,7.1 继承的基本概念,7.1.2 继承机制 类的图形表示(UML):,类名,

3、类名,类名,类名,属性,属性,行为,行为,具体,抽象,6,7.1 继承的基本概念,7.1.2 继承机制 类层次表示(UML):,秦冠苹果,国光苹果,水果,苹果,梨,红富士苹果,7,7.1 继承的基本概念,7.1.2 继承机制 IS-A与HAS-A,轮胎,汽车,真空轮胎,轮胎,8,7.1 继承的基本概念,7.1.3 继承的作用 继承机制的双重作用: 类的构造机制:继承通过扩充、组合先有类来构造新的类。 扩充:形成先有类的特例派生类; 组后:抽取若干现有类的共性形成新的抽象层次基类。类的构造机制:如果类B继承类A,则要求对象为A类型的地方也可以接受B类型的对象。 7.1.4 继承与软件重用软件重用

4、: 重用专家的经验;重用标准的设计与算法; 重用类库与过程(函数)库;重用语言和操作系统中内置的强大的命令;重用框架;重用完整的应用(程序)。重用程序源代码: 利用继承机制组织类之间的组织关系; 派生类具有调节所继承的属性和行为的能力; 提高程序可靠性。,9,7.1 继承的基本概念,7.1.5 C+继承常见的几种形式,D,A,B,C,A,B,C,A,B,C,D,单重继承,多重继承,重复继承,10,7.2 C+的继承机制,7.2.1 继承的语法 继承是类与类之间的一种关系 定义:“类B继承类A”, 或者说“类A派生类B” 图解为: 则在类B中除了自己定义的成员之外,还自动包括了类A中定义的数据成

5、员与成员函数,这些自动继承下来的成员称为类B的继承成员。,B,A,基类,派生类,11,7.2.1 继承的语法 继承的语法 class 派生类名: 基类类名表public: 公有成员说明列表;protected: 受保护成员说明列表;private: 私有成员说明列表; 其中基类类名表的格式为:access 基类类名1, , access 基类类名n access为继承访问控制符,规定了派生类对基类的继承方式,可为public,private或者protected, 继承访问控制符可省略,此时认为是private,7.2 C+的继承机制,12,class BASE ; class A:publi

6、c BASE / 单继承 ; class B:private BASE, public D / 多重继承 ; class C:public A, B ;,BASE,A,B,D,BASE,C,私有派生,7.2 C+的继承机制,7.2.1 继承的语法,13,7.2 C+的继承机制,7.2.1 继承的语法 保护访问控制属性:protected 在protected后定义的是保护段,其中的数据成员或成员函数称为受保护成员:具有公有成员与私有成员的双重角色。 一个类的受保护成员,对于其子孙类(派生类)的成员函数来说是公有的,对类本身及后代类之外定义的其他函数则是私有成员。 例: class BASE p

7、rivate: int x; protected: int i, j; ; class D:public BASE void make(); ; void D:make() int k = i* j ; ,14,7.2.1 继承的语法派生类可以重新定义基类的成员函数,覆盖基类的同名函数 例: class DATE public: DATE(int yy = 0, int mm = 0, int dd = 0); / 构造函数void set_date(int yy, int mm, int dd); / 设置日期 void get_date(int ,7.2 C+的继承机制,15,7.2.1

8、继承的语法class EUROPE_DATE: public DATE public: void print_date(); / 以欧洲格式(dd-mm-yy)打印日期void print(int isANSI); ; void EUROPE_DATE:print_date() / 以欧洲格式(dd-mm-yy)打印日期cout day “-”month “-”year“n”; ,7.2 C+的继承机制,16,7.2.1 继承的语法通过类名限定符在派生类中使用基类的同名成员void EUROPE_DATE:print(int isANSI) if (isANSI) DATE:print_dat

9、e();else print_date(); void main() EUROPE_DATE test ;test.print_date(); /调用EUROPE_DATE中重定义的同名函数/以欧洲格式(dd-mm-yy)打印test.DATE:print_date(); /以ANSI格式(yy.mm.dd)打印 ,7.2 C+的继承机制,17,7.2.1 继承的语法/ 程序:TIME.HPP / 功能:带有日期信息的时间类的类界面Class TIME: public DATE public:TIME(int hh, int mm, int ss);void set_time(int hh,

10、int mm, int ss);void get_time(int hh, int mm, int ss);void print_time(); Protected:int hour,minute,second; ;,7.2 C+的继承机制,DATE,EUROPE_DATE,TIME,18,7.2 C+的继承机制,7.2.2 继承访问控制规则 公有继承(公有派生)、私有继承、保护继承无论采用什么派生的方式,派生类中都不能访问基类的私有成员,19,7.2.2 继承访问控制规则class BASEprotected: int i, j;public: void get_ij();private:

11、int x_temp; ;class Y1:public BASE / 公有派生:在Y1类中,i、j是受保护成员float yMember; / get_ij()是公有成员 ;class Y2:protected BASE / 保护派生:在Y2类中,i、j是受保护成员 / get_ij()变成受保护成员 ;class Y3:private BASE / 私有派生:在Y3类中,i、j、 get_ij()都变 / 成私有成员 ;,7.2 C+的继承机制,20,7.2.3 一个应用继承机制的完整例子 简单图形程序设计,7.2 C+的继承机制,CPoint,int m_x;int m_y;,int G

12、etX();int GetY();,CRectangle,CPoint m_cpLocation;int m_nWidth;int m_nHeight;,int GetArea();int GetPerimeter();CPoint,CSquare,int GetEdge();,21,7.2.3 一个应用继承机制的完整例子 #include #include class CPoint private:int m_x;int m_y;public:CPoint(int, int);int GetX();int GetY(); ;,7.2 C+的继承机制,CPoint:CPoint(int x,

13、int y) m_x=x; m_y=y; int CPoint:GetX() return m_x; int CPoint:GetY() return m_y; ,22,7.2.3 一个应用继承机制的完整例子 class CRectangle /矩形类 public:CPoint m_cpLocation; /图形所在位置int m_nWidth; /图形的宽度int m_nHeight; /图形的高度CRectangle(int nX, int nY, int nWidth, int nHeight);int GetArea(); /求面积int GetPerimeter(); /求周长CP

14、oint,7.2 C+的继承机制,23,7.2.3 一个应用继承机制的完整例子CRectangle:CRectangle(int nX,int nY,int nW,int nH):m_cpLocation(nX,nY) m_nWidth=nW;m_nHeight=nH; int CRectangle:GetArea() return m_nWidth*m_nHeight; int CRectangle:GetPerimeter() return m_nWidth+m_nWidth+m_nHeight+m_nHeight; CPoint ,7.2 C+的继承机制,24,7.2.3 一个应用继承机

15、制的完整例子class CSquare : public CRectangle /正方形类,派生自矩形类 public:CSquare(int nX, int nY, int nEdge);int GetEdge(); /返回边长 ;CSquare:CSquare(int nX, int nY, int nEdge) : CRectangle(nX, nY, nEdge, nEdge) int CSquare:GetEdge() return m_nWidth; ,7.2 C+的继承机制,25,7.2.3 一个应用继承机制的完整例子void main() CRectangle r(1,1,2,

16、3);CSquare s(0,0,2);cout“Rectangle area: “r.GetArea()endl;cout“Square area: “s.GetArea()endl;getch(); ,7.2 C+的继承机制,程序运行结果:Rectangle area: 6Square area: 4,26,7.2.4 派生类对象的存储组织 派生类的对象不仅存放了在派生类中定义的非静态数据成员,而且也存放了从基类中继承下来的非静态数据成员。 例: class BASEprotected: int i, j;public: void get_ij();private: int x_temp; ;class Y1:public BASE float yMember; ;BASE obj1; Y1 obj2;,

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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