C语言程序设计6_第1页
C语言程序设计6_第2页
C语言程序设计6_第3页
C语言程序设计6_第4页
C语言程序设计6_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

会计学1C语言程序设计6对象间的关系(1/7)依赖关系组合关系派生关系集合关系第2页/共52页第1页/共52页对象间的关系(2/7)什么样的关系是依赖关系?读者依赖图书卖方依赖买方生物依赖食物第3页/共52页第2页/共52页对象间的关系(3/7)依赖关系:一个事物的变化可能会影响到使用它的另一个事物什么时候用依赖关系描述?A对象的行为需要B对象的参与时例:将B对象用作A对象行为的形参第4页/共52页第3页/共52页对象间的关系(4/7)什么样的关系是组合关系?人有两个眼睛汽车有四个轮胎班级有三十个学生第5页/共52页第4页/共52页对象间的关系(5/7)组合关系:一个事物包含若干“小”事物,这些事物通常与包含它的事物不是一类什么时候用组合关系描述?A对象拥有若干B对象时例:将B对象用作A对象的属性第6页/共52页第5页/共52页对象间的关系(6/7)什么样的关系是继承关系?学生是人研究生是学生狗是动物警犬是狗第7页/共52页第6页/共52页对象间的关系(7/7)继承关系:一个事物是另一事物的特殊形式什么时候用继承关系描述?A对象是B对象的特殊表现例:将B对象用作A对象的基类第8页/共52页第7页/共52页继承和派生(1/2)如果类A是类B的子集,则可将类A描述为类B的继承此时,称类A是类B的派生类,类B是类A的基类通常,派生类不需再次声明就自动具有基类的所有行为和属性第9页/共52页第8页/共52页继承和派生(2/2)语法:class派生类名:派生方式基类名例:classCar:publicAutomobile第10页/共52页第9页/共52页思考既然派生类是基类的继承,那么派生类对象与基类对象是什么关系?每个派生类对象包含一个基类对象第11页/共52页第10页/共52页思考派生类和基类谁更抽象?派生类和基类谁对应的对象更多?第12页/共52页第11页/共52页警犬类ver1.0例:PoliceDog1.0基类:Dog voidShow(); voidBay();派生类:PoliceDog voidDetective();第13页/共52页第12页/共52页思考派生类能使用基类的行为吗?如何使用?基类能使用派生类的行为吗?第14页/共52页第13页/共52页警犬类ver1.1例:PoliceDog1.1基类:Dog unsignedintage;派生类:PoliceDog unsignedintid;第15页/共52页第14页/共52页思考派生类能直接使用基类的private的属性吗?派生类能直接使用基类的protected的属性吗?派生类内部能使用基类的什么访问级别的行为?第16页/共52页第15页/共52页思考继承和组合有什么区别?派生类中包含基类对象,组合类中包含组成对象派生类中未声明基类对象,但自动包含了基类对象组合类中需主动声明组成对象第17页/共52页第16页/共52页接上页派生类中通过this指针使用基类对象组合类中使用组成对象名使用组成对象第18页/共52页第17页/共52页总结派生类是基类的扩充组合类是另外一个类,通常这个类与它包含的对象的类没有直接关系第19页/共52页第18页/共52页类型兼容规则(1/1)什么是类型兼容规则?警犬是狗因此:DogaDog=aPoliceDog;摩托车是交通工具因此:VehicleaVeh=aAutoBike;第20页/共52页第19页/共52页警犬类ver1.2例:PoliceDog1.2注意本例中的赋值语句第21页/共52页第20页/共52页思考能把派生类对象赋给基类对象吗?此时能通过基类对象使用派生类的行为和属性吗?能把派生类对象赋给基类对象的引用吗?能把派生类对象赋给指向基类对象的指针吗?第22页/共52页第21页/共52页总结类型兼容规则是指:在需要基类对象的任何地方,都可以使用公有派生类的对象来替代替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员第23页/共52页第22页/共52页总结派生类的对象可以赋值给基类对象派生类的对象可以初始化基类的引用派生类的对象的地址可以赋给指向基类的指针第24页/共52页第23页/共52页思考为什么能把派生类对象赋给基类对象?本例中派生类对象和它包含的基类对象之间是什么关系?派生类对象的大小和基类有关吗?第25页/共52页第24页/共52页派生类对象和基类对象的关系第26页/共52页第25页/共52页派生类的构造和析构(1/3)派生类不继承基类的构造函数和析构函数!!!!!那如何构造派生类对象?派生类和基类用各自的构造函数构造自己这部分派生类和基类谁先构造?第27页/共52页第26页/共52页派生类的构造和析构(2/3)派生类对象构造原则:先构造基类部分,再构造派生类部分即便是派生类可以直接修改基类的属性,在构造时也是各自构造各自部分,不要互相干涉第28页/共52页第27页/共52页警犬类ver1.3例:PoliceDog1.3注意本例中的构造和析构次序第29页/共52页第28页/共52页思考按什么次序构造?按什么次序析构?第30页/共52页第29页/共52页警犬类ver1.4例:PoliceDog1.4注意本例中新的构造函数第31页/共52页第30页/共52页思考carl的基类部分如何构造?如果想要使用基类的非默认构造函数怎么办?第32页/共52页第31页/共52页派生类的构造和析构(3/3)语法:使用“:”来指定当前对象的基类部分如何构造例:构造函数(形参表): 基类名(给基类的形参表)第33页/共52页第32页/共52页思考newPoliceDog的基类部分如何构造?用什么方式指定?第34页/共52页第33页/共52页思考如果同时拥有派生和组合,如何在构造时指定各自的构造方式?本例中的构造次序如何?本例中的析构次序又如何?第35页/共52页第34页/共52页派生类的访问控制(1/5)派生类的继承方式:公有继承保护继承私有继承第36页/共52页第35页/共52页派生类的访问控制(2/5)类的访问控制:派生类用户代码第37页/共52页第36页/共52页派生类的访问控制(3/5)公有继承:派生类用户代码第38页/共52页第37页/共52页派生类的访问控制(4/5)保护继承:派生类用户代码protected第39页/共52页第38页/共52页派生类的访问控制(5/5)私有继承:派生类用户代码privateprivate第40页/共52页第39页/共52页思考当基类的访问控制发生变化时,用户代码有什么变化?当基类的访问控制发生变化时,派生类如何实现基类提供的功能?第41页/共52页第40页/共52页作用域分辨(1/4)类名::成员名类名::成员名(参数表)标识符可见性原则:“新的”掩蔽掉“旧的”第42页/共52页第41页/共52页作用域分辨(2/4)单继承同名隐藏:派生类的成员如果和基类成员名相同,则派生类成员将隐藏基类成员第43页/共52页第42页/共52页思考本例中,carl.Show()是派生类的行为还是基类的行为,为什么?本例中,this->id是派生类的属性还是基类的属性,为什么?第44页/共52页第43页/共52页作用域分辨(3/4)多继承同名隐藏:派生类的成员如果和多个基类成员名相同,则派生类成员将隐藏所有基类成员第45页/共52页第44页/共52页思考本例中,carl.Show()哪个类的行为?如何通过当前对象,访问它的基类的被掩蔽掉的行为?如果SuperDog类没定义Show(),carl.Show()会怎样?第46页/共52页第45页/共52页思考本例中,carl.Dog::Show()怎么解释?为什么报错了?第47页/共52页第46页/共52页作用域分辨(4/4)从一个基类派生出的多继承的基类的同名隐藏:第48页/共52页第47页/共52页思考为什么carl.PoliceDog::id和carl.LifeSavingDog::id不相等?第49页/共52页第48页/共52页总结从同一个基类派生出来的多继承,在每个派生类中都含有各自的基类部分如果希望多个派生类中只含有一个基类部分,

温馨提示

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

评论

0/150

提交评论