c++课件谭浩强C++面向对象程序设计5章节

上传人:E**** 文档编号:91244673 上传时间:2019-06-26 格式:PPT 页数:65 大小:519KB
返回 下载 相关 举报
c++课件谭浩强C++面向对象程序设计5章节_第1页
第1页 / 共65页
c++课件谭浩强C++面向对象程序设计5章节_第2页
第2页 / 共65页
c++课件谭浩强C++面向对象程序设计5章节_第3页
第3页 / 共65页
c++课件谭浩强C++面向对象程序设计5章节_第4页
第4页 / 共65页
c++课件谭浩强C++面向对象程序设计5章节_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《c++课件谭浩强C++面向对象程序设计5章节》由会员分享,可在线阅读,更多相关《c++课件谭浩强C++面向对象程序设计5章节(65页珍藏版)》请在金锄头文库上搜索。

1、第五章 继承与派生,继承性是面向对象程序设计中最重要的机制。这种机制提供了无限重复利用程序资源的一种途径。通过C+语言中的继承机制,可以扩充和完善旧的程序设计以适应新的需求。这样不仅可以节省程序开发的时间和资源,并且为未来程序增添了新的资源。,5.1 继承与派生的概念,交通工具分类层次图,1、所谓继承,就是新的类从已有类那里得到已有的特性。 2、从另一个角度来看,从已有类产生新类的过程就是类的派生。 3、已有的类称为基类或父类,产生的新类称为派生类或子类。 4、派生类同样也可以作为基类再派生新的类,这样就形成了类的层次结构。,相关概念,class Student int num; char n

2、ame30; char sex; public: void display( ) /对成员函数display的定义 cout“num: “numendl; cout“name: “nameendl; cout“sex: “sexendl; ;,class Studend1 int num; /此行原来己有 char name20; /此行原来己有 char sex; /此行原来己有 int age; char addr20; public: void display( ) /此行原来己有 cout“num: “numendl; /此行原来己有 cout“name: “nameendl;/此行原

3、来己有 cout“sex: “sexendl; /此行原来己有 cout“age: “ageendl; cout“address: “addrendl; ;,利用原来定义的类Student作为基础,再加上新的内容即可,以减少重复的工作量。 C+提供的继承机制就是为了解决这个问题。,在C+中所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类(base class)”或“父类(father class)”。新建立的类称为“派生类(derived class)”或“子类(son class)”。,5. 2 派生类的声明方式 在C+中,派生类的一般声明语法如下: class:

4、继承方式 派生类成员声明; ; 其中: class是类声明的关键字,用于告诉编译器下面声明的是一个类。 派生类名是新生成的类名。,class Student1: public Student/声明基类是Student private: int age; /新增加的数据成员 string addr; /新增加的数据成员 public: void display_1( ) /新增加的成员函数 cout“age: “ageendl; cout“address: “addrendl; ;,类A派生类B:类A为基类,类B为派生类。,A,B,新增加的成员数据和成员函数,5.3 派生类的构成,在C+语言中,

5、一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。,可以用多个基类来派生一个类。,A,B,C,多重继承是单一继承的扩展,派生类中新定义的成员,当从已有的类中派生出新的类时,可以对派生类做以下几种变化: 1、 可以继承基类的成员数据或成员函数。 2、可以增加新的成员变量。 3、可以增加新的成员函数。 4、可以重新定义已有的成员函数。 5、可以改变现有的成员属性。,类A派生类B:类A为基类,类B为派生类。,A,B,但派生并不是简单的扩充,有可能改变基类的性质。,有三种派生方式:公有派生、保护派生、私有派生。,class B:publ

6、ic A.;,class B:protected A.;,class B:private A.;,默认的是私有派生。,class B: A .;,A为私有派生,从一个基类派生一个类的一般格式为: class ClassName:BaseClassName private: ; /私有成员说明 public: ; /公有成员说明 protected: ; /保护成员说明 ,派生类名,基类名,继承方式,public: 表示公有基类 private:表示私有基类(默认) protected:表示保护基类,派生类中新增加的成员,派生类生成过程 在C+程序设计中,进行派生类的声明,给出该类的成员函数的实

7、现之后,整个类就算完成了,这时就可以由它来生成对象进行实际问题的处理。仔细分析派生新类这个过程,实际是经历了三个步骤:吸收基类成员,改造基类成员和添加新的成员。,1吸收基类成员 在类继承中,第一步是将基类的成员全盘接收,这样派生类实际上就包含了它的所有基类中除构造和析构函数之外的所有成员。 注意:在派生过程中,构造函数和析构函数都不被继承。,2改造基类成员 对基类成员的改造包括两个方面: 第一是基类成员的访问控制,主要依靠派生类声明时的继承方式来控制,将在后面的章节详细介绍。 第二是对基类数据或函数成员的覆盖,就是在派生类中声明一个和基类数据或函数同名的成员,如果派生类声明了一个和某个基类成员

8、同名的新成员(如果是成员函数,则参数表也要相同,参数不同的情况属于重载),派生的新成员就覆盖了外层同名成员。,3添加新的成员 派生类新成员的加入是继承与派生机制的核心,是保证派生类在功能上有所发展的关键。我们可以根据实际情况的需要,给派生类添加适当的数据和函数成员,以实现必要的新增功能。,5.4 派生类成员的访问属性,派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员,但是这些成员的访问属性在派生的过程中是可以调整的。从基类继承的成员,其访问属性由继承方式控制。 类的继承方式有public(公有)继承、protected(保护)继承和private(私有)继承三种。对于不同的

9、继承方式,会导致基类成员原来的访问属性在派生类中有所变化。,5.4.1 公有继承 class ClassName: public BaseClassName 公有派生时,基类中所有成员在派生类中保持各个成员的访问权限。,公有派生,派生类中保持基类的成员特性,基类:public: 在派生类和类外可以使用 protected: 在派生类中使用 private: 不能在派生类中使用,A,B,public,x在类B新增加的成员中不能直接引用,y在类B中可以引用,z在整个文件中可以引用,对类B的对象初始化即是对x,y,z,m,n等全部成员的初始化,class A int x; protected: in

10、t y; public: int z; A(int a,int b,int c)x=a;y=b;z=c; int Getx()return x; int Gety()return y; void ShowA()cout “x=“xt“y=“yt“z=“zn; ; class B:public A int m,n; public: B(int a,int b,int c,int d,int e):A(a,b,c)m=d;n=e; void Show()cout“m=“mt“n=“nn; cout“x=“Getx()t“y=“yt“z=“zn; int Sum()return ( Getx()+y

11、+z+m+n); ; void main(void) B b1(1,2,3,4,5); b1.ShowA(); b1.Show(); cout “Sum=“b1.Sum()n;cout“x=“b1.Getx()t; cout “y=“ b1.Gety()t; cout “z=“b1.zn;,公有派生,对基类初始化,因为x是基类私有,所以在派生类和类外中不能直接引用,因为y是基类保护,所以在派生类中可以直接引用。而在类外不可直接引用。,因为z是基类公有,所以在派生类中和类外均可直接引用。,X=1 y=2 z=3 m=4 n=5 X=1 y=2 z=3 Sum=15 X=1 y=2 z=3,5.4

12、.2 私有继承 class ClassName: private BaseClassName 私有派生时,基类中公有成员和保护成员在派生类中均变为私有的,在派生类中仍可直接使用这些成员,基类中的私有成员,在派生类中不可直接使用。,私有派生,派生类中基类公有和保护成员成为私有,基类:public: (变为私有)在派生类中使用,类外不可使用 protected: (变为私有)在派生类中使用,类外不可使用 private: 不能在派生类中和类外使用,A,B,private,x在类B新增加的成员中不能直接引用,y在类B中可以引用,z在类B中可以引用,对类B的对象初始化即是对x,y,z,m,n等全部成员

13、的初始化,均为私有类B 外不能引用,class A int x; protected: int y; public: int z; A(int a,int b,int c)x=a;y=b;z=c; int Getx()return x; int Gety()return y; void ShowA()cout “x=“xt“y=“yt“z=“zn; ; class B:private A int m,n; public: B(int a,int b,int c,int d,int e):A(a,b,c)m=d;n=e; void Show()cout“m=“mt“n=“nn; cout“x=“

14、Getx()t“y=“yt“z=“zn; int Sum()return ( Getx()+y+z+m+n); ; void main(void) B b1(1,2,3,4,5); b1.ShowA(); b1.Show(); cout “Sum=“b1.Sum()n;cout“x=“b1.Getx()t; cout “y=“ b1.Gety()t; cout “z=“b1.zn;,私有派生,对基类初始化,因为x是基类私有,所以在派生类和类外中不能直接引用,y是基类保护,所以在派生类中可以直接引用。而在类外不可直接引用。,z是基类公有,私有派生变为私有,所以在派生类中可直接引用,而在类外不可。

15、,这些函数都是基类公有,在类外不可使用。,A a1(1,2,3); a1.ShowA();,5.4.3 保护成员和保护继承 class ClassName: protected BaseClassName 保护派生时,基类中公有成员和保护成员在派生类中均变为保护的,在派生类中仍可直接使用这些成员,基类中的私有成员,在派生类中不可直接使用。,基类:public: (变为保护)在派生类中使用,类外不可使用 protected: (变为保护)在派生类中使用,类外不可使用 private: 不能在派生类中和类外使用,A,B,protected,x在类B新增加的成员中不能直接引用,y在类B中可以引用,z在类B中可以引用,对类B的对象初始化即是对x,y,z,m,n等全部成员的初始化,均为保护类B 外不能引用,访问属性与继承的关系,总结: 在派生中,通过继承方式可以改变成员的访问属性。按访问属性的不同,成员可以归纳为以下四种。 不可访问的成员。 私有成员。 保护成员。 公有成员。,5.4.4 多级派生时的访问属性,A,B,C,class A int k;

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

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

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