2课件10章继承类和派生类_第1页
2课件10章继承类和派生类_第2页
2课件10章继承类和派生类_第3页
2课件10章继承类和派生类_第4页
2课件10章继承类和派生类_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+语言程序设计主讲教师:计算中心第10章继承类和派生类2单继承基类和派生类310.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限基类和派生类反映了类与类的 继承关系,派生类继承了基类,派生类的成员中包含了基类的所有成员,并且派生类还有自己的成员。410.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限派生类是用来生成新类的一种方法,所生成的新类与原类有一种所属的关系。基类和派生类是相对而言的。一个基类可以派生出一个或多个派生类,而每个派生类又可作基类再派生出新的派生类,如此一代一代地派生下去,便形成了类

2、的继承层次结构510.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限派生类可以是单重继承的派生类,也可以是多重继承的派生类,两者的区别仅在于所继承基类数不同class : ;610.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限class Apublic:A(i)a=i;void pr()coutaendl;private:a;;class B:public A public:private:b;710.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限继承方式

3、包含以下3种:public(公有的方式)private(私有的方式)protected(保护的方式)默认方式: 对 class 来讲是 private ; 对 struct 来 讲 是 public。810.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限基类成员在不同的继承方式下,在派生类的权限规则如下:基类中的私有成员无论哪种继承方式在派生类中都是不能直接的在公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有成员和保护成员910.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限基类成员在不同的

4、继承方式下,在派生类的权限规则如下:私有继承方式下,基类中公有成员和保护成员在派生类中都为私有成员保护继承方式下,基类中公有成员和保护成员在派生类中都为保护成员1010.1基类和派生类基类和派生类的关系派生类的定义格式派生类的三种继承方式基类成员在派生类中的权限基类私有不可,公有不变,私有私有,保护保护继承方式基类成员publicprivateprotectedpublicpublicprivateprotectedprivate不可不可不可protectedprotectedprivateprotected例10.1,在main函数中定义的3个对象,给他们成员的赋值中,哪些是错误的?P257

5、1110.1基类和派生类基类成员在派生类中的权限D1D2D3Test()Test()Test()public继承方式private继承方式protected继承方式b1=10;public b2=20;protectedb1=8;private b2=9;privateb1=15;protected b2=16;protectedb3=30;b3=10;b3=17;D33public继承方式Test()b1=18;protectedb2=19;protectedb3=20;D22public继承方式Test()b1=11;b2=12;b3=13;D11public继承方式Test()b1=5;

6、publicb2=6;protectedb3=7;mainD11 d11b1,D22 d22D33 d33Basepublicb1protectedb2privateb3第10章继承类和派生类12单继承基类和派生类公有继承方式1310.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则Cpublic继承方式f3();publicBpublic继承方式f2();publicj2;protectedi2;privateApublicF1()protectedj1privatei11410.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则

7、公有继承方式在公有继承方式下,派生类可以从基类中继承的基类的公有成员和保护成员,还可以派生类中定义的所有成员。派生类的对象只能基类中的公有成员和派生类中定义的公有成员私有继承方式1510.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则mainB bb.f(10)b.h()Bprivate继承方式h();publicA:f;publicApublicf(i)g()1610.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则私有继承方式在私有继承方式下,派生类可从基类中继承的公有成员和保护成员,它们在派生类中是私有的,还可以派生类自身

8、的所有成员。派生类对象仅能员派生类自己的公有成保护继承方式1710.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则ABprotected继承方式B();publicPr();publicmainB b(“lu”)b.Pr()publicA(const char *)protectedname8018保护继承方式在保护继承方式下,派生类可基类的公有成员和保护成10.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则员,也可派生类自身的所有成员。派生类的对象只能访问派生类自身的公有成员。保护继承方式可以使基类中的公有成员不被派生类的对

9、象访问,又可以使基类的保护成员被派生类1910.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则派生类的构造函数应该包含它的直接基类的构造函数。定义格式如下: (): (),2010.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则掌握派生类构造函数时应注意如下两点:派生类构造函数执行顺序如下:先执行基类构造函数;再执行子对象的构造函数(如有子对象的话);最后执行派生类构造函数的函数体。2110.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则掌握派生类构造函数时应注意如下两点:派生类构造函数的成员

10、初始化列表中应该显式地包含基类中带参数的构造函数,或者隐含地包含基类中的默认构造函数2210.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则派生类Bpublic继承方式public B();B(i,j,k);B();Pr();b A aaprivate基类 Apublic默认构造函数A()构造函数A(i)析构函数A()成员函数Pr()成员函数Geta()Private数据成员a2310.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则由于析构函数不能继承,因此在派生类的析构函数中要包含它的基类的析构函数派生类析构函数的执行顺序如

11、下:先执行派生类析构函数的函数体;再执行子对象所在类的析构函数(如果有子对象的话);最后执行直接基类中的析构函数。2410.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则在基类中定义有默认构造函数或者没有定义任何构造函数时,派生类构造函数中隐含对基类默认构造函数的调用当基类的构造函数使用一个或多个参数时,派生类的构造函数必须提供将参数传递给基类构造函数的途径2510.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则当一个类型至少包含了另一个类型的所有行为,则称该类型是另一个类型的子类型例如,在公有继承下,派生类是基类的子类型26

12、10.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则如果类型A是类型B的子类型,则称类型A适应于类型B,这时用类型B对象的操作也可以用于类型A的对象。因此,可以说类型A的对象就是类型B的对象子类型的关系是不可逆的2710.2单继承派生类对基类成员的访问权限派生类的构造函数和析构函数子类型和赋值兼容规则当类型A是类型B的子类型时,则满足下述的赋值兼容规则 A类的对象可以赋值给B类的对象 A类的对象可以给B类对象引用赋值 A类的对象地址值可以给B类对象指针赋值派生类中继承的基类中的成员的基类中私有成员派生类不可直接权限。公有继承方式下,基类中公有成员和保护成员在派生类中仍然是公有的和保护的。私有继承方式下,基类中公有成员和保护成员在派生类中都是私有的。保护继承方式下,基类中公有成员和保护成员在派生类中都是保护的。单继承中派生类构造函数和析构函数的特点派生类的构造函数中显式或隐含的包含着直接基类的构造函数。显式包含的带参数的构造函

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论