面向对象编程优秀PPT.ppt

上传人:石*** 文档编号:65767395 上传时间:2022-12-08 格式:PPT 页数:157 大小:4.58MB
返回 下载 相关 举报
面向对象编程优秀PPT.ppt_第1页
第1页 / 共157页
面向对象编程优秀PPT.ppt_第2页
第2页 / 共157页
点击查看更多>>
资源描述

《面向对象编程优秀PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象编程优秀PPT.ppt(157页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象编程第一页,本课件共有157页授课教师:郝应光邮件地址:h_2第二页,本课件共有157页3课程考核及成绩构成l本课程的成绩由期末考试和平时作业2部分构成l平时成绩由:期末大作业+平时随堂作业构成l具体比例待定第三页,本课件共有157页4主要内容l面向对象技术lC+语法概要(6)lMFC框架基础详解(15)lMFC文档/视图结构详解(9)l几个应用程序开发实例(6)lVisual C+应用程序设计(12)多线程程序设计(3)TCP/IP网络程序设计(3)动态连接库程序设计(3)数据库程序设计(3)第四页,本课件共有157页5第一部分第一部分 面向对象技术面向对象技术l面向对象概念面向对象

2、概念lUMLUML第五页,本课件共有157页6第二部分 C+语法概要类和对象静态数据成员及成员函数对象与指针操作符重载和友员继承多态性第六页,本课件共有157页7第三部分 MFC框架基础Visual C+集成开发环境简介Windows操作系统下的应用程序(SDK、MFC)用Appwizard开发一个MFC程序事件处理、映射模式及滚动视图GDI、颜色及字体对话框及控件ActiveX及IE公用控件位图第七页,本课件共有157页第四部分 MFC文档视图结构菜单、键盘及命令处理工具栏及状态栏文档和视图分离SDI及MDI文档的读写打印及打印予览拆分窗口及多视图8第八页,本课件共有157页9第五部分 MF

3、C程序设计的其他方面多线程程序设计数据库程序设计动态连接库程序设计TCP/IP网络程序设计第九页,本课件共有157页10主要参考书l面向对象建模与设计,面向对象建模与设计,RumbaughRumbaugh,电力出版社,电力出版社l面向对象分析与设计,面向对象分析与设计,Grady BoochGrady Booch,机械工业出版社,机械工业出版社lThinking in C+Thinking in C+,Bruce EckelBruce EckellC+PrimerC+Primer,Stanley B LippmanStanley B Lippman,中国电力出版社,中国电力出版社lC+C+语言

4、及其程序设计教程,张国峰,电子工业出语言及其程序设计教程,张国峰,电子工业出版社版社l深入浅出深入浅出MFCMFC,2Ed2Ed,侯俊杰(侯杰),松岗。,侯俊杰(侯杰),松岗。lVisual C+Visual C+技术内幕,技术内幕,MicrosoftMicrosoft,北京希望电子出版,北京希望电子出版社社第十页,本课件共有157页11主要网络资源(microsoft)(世界最大开源代码库)第十一页,本课件共有157页第一部分第一部分 面向对象技术面向对象技术12第十二页,本课件共有157页软件开发软件开发的过程就是程序员对客观世界问题域形式化的过程第十三页,本课件共有157页计算机开发语言

5、v机器语言、汇编语言、高级语言,高级语言可能有几千种v计算机语言都是某种程度的形式语言第十四页,本课件共有157页v计算机高级语言的历史由美国科学家巴科斯设计,1956年在IBM计算机上实现的FORTRAN。70年代以来的PASCAL80年代,C语言80年代后期,C+90年代以来,语言要OO而且Visual,更要Web,Java快速推广。第十五页,本课件共有157页vPO方法:现实世界 流程图(变量,函数)PO语言 执行求解 vOO方法:现实世界 类图(对象,方法)OO语言 执行求解OO作为一种思想及编程语言,为软件开发的整个过程:分析、设计到coding,提供了一个完整解决方案。从PO到OO

6、第十六页,本课件共有157页17面向过程思想问题域(Domain)以问题域的系统流程为中心分析Sub1Sub2Subn.各子流程实现-函数化Func1Func2Funcn.根据系统的流程组建软件,通过函数的调用实现第十七页,本课件共有157页18面向对象思想问题域(Domain)以问题域中的事物为中心思考问题Object1Object2Objectn.对象归类-抽象化Class1Class2Classn.类实例化:定义对象,构建系统,形成解决方案第十八页,本课件共有157页19面向对象的基本概念lCoad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信”。l如果一个软件系统是使

7、用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。第十九页,本课件共有157页20对象l对象是面向对象开发模式的基本成份。l每个对象可用它本身的一组属性和它可以执行的一组操作来定义。l属性一般只能通过执行对象的操作来改变。l操作又称为方法或服务,它描述了对象执行的功能,若通过消息传递,还可以为其它对象使用。第二十页,本课件共有157页21消息(Message)l消息是一个对象与另一个对象的通信单元,是要求某个对象执行类中定义的某个操作的规格说明。l一个对象接收到消息则调用消息中指定的方法,并将形式参数与参数表中相应的值结合起来。第二十一页,本课件共有157页22类类l类是一组

8、具有相同数据结构和相同操作的对象的集合。l类的定义包括一组数据属性和在数据上的一组合法操作。l类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。第二十二页,本课件共有157页23l同一个类的每个对象都是类的实例(Instance)(Instance),它们都可使用类中提供的函数。l对象的状态则包含在它的实例变量,即实例的属性中。第二十三页,本课件共有157页24继承(Inheritance)(Inheritance)l继承是使用已存在的定义做为基础建立新定义的技术。l新类的定义是基础类所声明的数据和新类所增加的声明的组合。新类复用既存的定义,而不要求修改既存类。l既存类可当

9、做基类来引用,则新类相应地可当做派生类来引用。第二十四页,本课件共有157页25面向对象方法学l面向对象分析OOAl面向对象设计OODl面向对象实现OOP第二十五页,本课件共有157页26面向对象技术回顾l面向对象技术是许多人历经多年研究积累的产物。类的概念,是面向对象的重要组成部分。Smalltalk,提出许多面向对象技术的核心概念,如:消息和继承。Dijkstra的软件正确性理念,提出了用抽象层构造软件的观点。Ada语言,提出了一般性和包两个概念。C+语言,最广泛使用的面向对象的语言。Java语言,健壮的、可移植的、流行的面向对象语言。第二十六页,本课件共有157页27UML的产生l198

10、8年到1992年是面向对象方法学蓬勃发展的时期,人们从各自的经历和软件开发的经验提出了各种面向对象的开发方法,代表的有:Sally Shlaer 和 Steve Mellor以信息模型化方法作为基础,并为目标系统增设了状态模型和过程模型;Peter Coad 和 Ed Yourdon则在信息模型化、面向对象的程序设计语言和基于知识的系统的基础上,建立了他们的OOA和OOD,主要工具是类与对象图、对象状态图和服务图;HP公司的Fusion开发方法。第二十七页,本课件共有157页28Jim RumbaughGrady BoochIvar Jacobson第二十八页,本课件共有157页29lOOA和

11、OOD是面向对象方法学中重要的部分,UML是具体的方法lOOP涉及到具体的编程语言,C+l开发要使用合适的工具IDE:Visual C第二十九页,本课件共有157页面向对象的特点30封装(Encapsulation)通过定义类实现继承(Inheritance)通过派生新类实现多态性(Morphism)虚拟函数实现第三十页,本课件共有157页XO(X?-Oriented)SO(Service-Oriented)OO(对象、类)PO(过程、函数、变量)OO之后是什么?第三十一页,本课件共有157页32第二部分 C+语法概要第一章 C+基础第三十二页,本课件共有157页331.1 C+1.1 C+的

12、起源和特点的起源和特点lC C语言语言19721972年,由年,由Dennis RitchieDennis Ritchie设计,可以设计,可以认为是最优影响力的发明之一。认为是最优影响力的发明之一。l为改进为改进C C语言,语言,“带类的带类的C”,1983C”,1983命名为命名为C+C+对对C C的类型系统改进和扩充的类型系统改进和扩充(更安全更安全)支持面向对象支持面向对象lC+C+保持与保持与C C兼容兼容(快速普及快速普及)lC+C+不是纯粹的面向对象的语言不是纯粹的面向对象的语言第三十三页,本课件共有157页341.2 程序的编译过程第三十四页,本课件共有157页351.3 C+1

13、.3 C+的词法记号的词法记号l关键字关键字l各种常量各种常量l操作符操作符l标识符标识符l分隔符分隔符第三十五页,本课件共有157页361.4 C+1.4 C+程序的结构程序的结构第三十六页,本课件共有157页37l注释注释l输入和输出输入和输出l函数函数l变量(对象)变量(对象)l符号常量符号常量l表达式表达式l语句语句第三十七页,本课件共有157页381.5C+1.5C+的基本数据类型的基本数据类型第三十八页,本课件共有157页391.71.7对象声明对象声明l基本语法如下:数据类型 标识符1,标识符2,。标识符n;l初始化数据类型 标识符1(初始值1),标识符2(初始值2),。标识符n

14、(初始值n);数据类型 标识符1=初始值1,标识符2=初始值2,。标识符n=初始值n;l赋值I=10;第三十九页,本课件共有157页401.61.6常量常量l整数常量整数常量l浮点常量浮点常量l字符常量字符常量l字符串常量字符串常量l布尔常量布尔常量第四十页,本课件共有157页411.81.8枚举类型枚举类型l定义:定义:通过枚举一个类型的值域来定义一个数据类通过枚举一个类型的值域来定义一个数据类型,值域是通过在枚举声明时所指定的一组型,值域是通过在枚举声明时所指定的一组文字量(又称枚举常量)指定的。文字量(又称枚举常量)指定的。l语法形式:语法形式:enum enum 标识符标识符 标识符标

15、识符1 1,标识符,标识符2 2,标识符,标识符3 3,。标识符,。标识符n;n;第四十一页,本课件共有157页421.91.9表达式表达式l表达式由操作数和操作符组成,操作符分:表达式由操作数和操作符组成,操作符分:算术操作符:算术操作符:+、-、*、/、%、+、-关系操作符:关系操作符:、=、=、!=!=逻辑操作符:逻辑操作符:&、|、!逗号表达式:逗号表达式:?:?:sizeofsizeof操作符:操作符:sizeofsizeof位操作符:位操作符:&、|、赋值操作符:赋值操作符:=第四十二页,本课件共有157页431.101.10表达式中的类型强制表达式中的类型强制l隐含地从一种类型向

16、另一种类型的值的隐含地从一种类型向另一种类型的值的映射。映射。l赋值类型强制赋值类型强制右边的表达式类型映射成左值的类型。右边的表达式类型映射成左值的类型。l强制类型转换强制类型转换static_cast(E)static_cast(E)T(E)T(E)(T)E(T)E第四十三页,本课件共有157页44第二章第二章 C+C+程序的基本控制结程序的基本控制结构构l顺序结构顺序结构表达式语句表达式语句空语句空语句块语句块语句l选择结构选择结构l循环结构循环结构第四十四页,本课件共有157页452.1 2.1 选择结构选择结构lififlif-elseif-else及其嵌套及其嵌套lswitchca

17、seswitchcase第四十五页,本课件共有157页462.22.2循环结构循环结构lwhilewhileldowhiledowhilelforfor第四十六页,本课件共有157页47嵌套循环循环是可以嵌套的第四十七页,本课件共有157页482.32.3辅助控制语句辅助控制语句lgotogotolbreakbreaklcontinuecontinue第四十八页,本课件共有157页49第三章第三章 函数函数第四十九页,本课件共有157页503.1 3.1 函数的基本概念函数的基本概念l完成特定功能的一段代码完成特定功能的一段代码具有合法的名称具有合法的名称具有一定返回类型具有一定返回类型可以多

18、次调用可以多次调用l基本形式:基本形式:返回类型返回类型 函数名(形式参数函数名(形式参数1 1,形式参数形式参数2 2,。,形式参数,。,形式参数n)n)函数体;函数体;第五十页,本课件共有157页513.2 3.2 参数的传递参数的传递l值调用值调用l地址调用地址调用l引用调用引用调用l参数的求值顺序参数的求值顺序第五十一页,本课件共有157页523.3 3.3 重载重载l具有相同函数名,但其参数个数不同或参数类型不同的一组函数称为重载。第五十二页,本课件共有157页533.4 3.4 带缺省参数值的函数带缺省参数值的函数l函数声明中可以为一个或多个参数指定缺省参数值。具有缺省值的参数右边

19、不能出现没有缺省值的参数。重载函数的参数具有缺省值时要注意。例:lvoid fun(int x,int y=0)lvoid fun(int x)第五十三页,本课件共有157页54第四章 类和对象4.1类的结构lC+的类是对象的抽象数据成员。成员函数。lC+类的说明第二部分 C+语法概要第五十四页,本课件共有157页55举例:4.1类的结构(外部说明)第五十五页,本课件共有157页56l访问控制描述符public后声明的是公有数据成员和成员函数,可被任何程序单元引用。private后声明的是私有数据成员和成员函数,仅可被类内部引用。public和private出现的顺序和次数是任意的。4.1类的

20、结构(外部说明)第五十六页,本课件共有157页57l类成员函数的实现4.1类的结构(内部实现)举例第五十七页,本课件共有157页584.2类的实例化-对象的实现l一般语法:类标识符 对象标识符;l可以声明多个对象,对象之间代码共享,数据独立。l可使用对象名引用对象的公有成员函数。方法如下:对象名.成员函数名(参数列表);第五十八页,本课件共有157页594.2类的实例化-对象的实现l成员函数所操作的数据成员是该类的某个对象的数据成员。第五十九页,本课件共有157页60举例4.2类的实例化-对象的实现第六十页,本课件共有157页614.3构造函数和析构函数l构造函数的作用是在对象被创建时使用特定

21、的值构造对象(初始化)。l析构函数的作用是在对象被删除时做一些清理工作。l构造函数与类同名。l析构函数是类名前加l两者无返回类型,析构函数无参数。第六十一页,本课件共有157页624.3构造函数和析构函数举例第六十二页,本课件共有157页634.3构造函数和析构函数第六十三页,本课件共有157页644.3构造函数和析构函数第六十四页,本课件共有157页654.4 成员函数的内联实现l函数体放在类体内。l函数体放在类体外,使用inline关键字。第六十五页,本课件共有157页664.4成员函数的内联实现第六十六页,本课件共有157页674.5带缺省参数值的成员函数和成员函数重载#include

22、class Locationpublic:Location(int x=0,int y=0);void Move(int x=5,int y=5);void ValueX(int x);int ValueX();void ValueY(int y);int ValueY();private:void Set(int x,int y);int X,Y;第六十七页,本课件共有157页684.5带缺省参数值的成员函数和成员函数重载Location:Location(int x,int y)Set(x,y);void Location:Move(int x,int y)Set(x,y);void Lo

23、cation:ValueX(int val)X=val;int Location:ValueX()return X;void Location:ValueY(int val)Y=val;int Location:ValueY()return Y;void Location:Set(int x,int y)X=x;Y=y;第六十八页,本课件共有157页694.5带缺省参数值的成员函数和成员函数重载int main()Location A,B;/Location A(0,0),B(0,0)A.Move();/A.X和A.Y被设为5 A.ValueX(15);/A.X=15 coutA.ValueX

24、()A.ValueY()endl;B.Move(6,2);/B.X=6,B.Y=2 B.ValueY(4);coutB.ValueX()B.ValueY()endl;return 0;第六十九页,本课件共有157页70第五章第五章 作用域、生存期和可见性作用域、生存期和可见性第七十页,本课件共有157页715.1作用域及可见性作用域及可见性l一个标识符的有效区域。一个标识符的有效区域。l分为:函数原型作用域、块作用域、类分为:函数原型作用域、块作用域、类作用域、文件作用域。作用域、文件作用域。第七十一页,本课件共有157页72函数原型作用域函数原型作用域l函数原型中所作的参数声明在该作用域,函

25、数原型中所作的参数声明在该作用域,始于左括号,结束于右括号。始于左括号,结束于右括号。第七十二页,本课件共有157页73块作用域块作用域l块作用域由一对花括号定义。(局部作块作用域由一对花括号定义。(局部作用域)用域)第七十三页,本课件共有157页74块作用域块作用域第七十四页,本课件共有157页75类作用域类作用域第七十五页,本课件共有157页76文件作用域文件作用域第七十六页,本课件共有157页77可见性可见性l标识符是否可以引用。标识符是否可以引用。l在嵌套作用域中,内层作用域的标识符在嵌套作用域中,内层作用域的标识符优先于外层作用域的标识符。优先于外层作用域的标识符。lC+C+中,标识

26、符必须先声明后引用,在同中,标识符必须先声明后引用,在同一作用域中不能声明同样的标识符。一作用域中不能声明同样的标识符。第七十七页,本课件共有157页78可见性举例可见性举例第七十八页,本课件共有157页795.25.2对象的生存期对象的生存期l静态生存期静态生存期与程序的运行期相同。这种对象的存储单元相对位与程序的运行期相同。这种对象的存储单元相对位置在整个程序的运行期间不变置在整个程序的运行期间不变文件作用域或用文件作用域或用staticstatic指定。指定。若未显式指定初始值,为零。若未显式指定初始值,为零。l动态生存期动态生存期在函数内部(块作用域)声明的对象是动态生存期。在函数内部

27、(块作用域)声明的对象是动态生存期。若未显式指定初始值,为任意值。若未显式指定初始值,为任意值。第七十九页,本课件共有157页80对象的生存期举例对象的生存期举例第八十页,本课件共有157页815.35.3静态成员函数和静态数据成静态成员函数和静态数据成员员第八十一页,本课件共有157页82数据共享的方法数据共享的方法l数据存储在局部对象中,通过参数传递机制实现数据存储在局部对象中,通过参数传递机制实现函数间的数据共享。函数间的数据共享。l数据存储在全局对象中,通过全局对象进行数据交数据存储在全局对象中,通过全局对象进行数据交换。换。l封装在类中封装在类中l全局对象存在的问题全局对象存在的问题

28、可见性无限制可见性无限制不能保证操作的合法性不能保证操作的合法性l解决上述问题的方法是类及其封装技术,相应提出解决上述问题的方法是类及其封装技术,相应提出静态数据成员和静态成员函数。静态数据成员和静态成员函数。第八十二页,本课件共有157页83举例举例第八十三页,本课件共有157页84举例举例第八十四页,本课件共有157页85举例举例第八十五页,本课件共有157页86举例举例第八十六页,本课件共有157页87举例举例第八十七页,本课件共有157页88第六章第六章 对象与指针对象与指针第八十八页,本课件共有157页896.16.1指针指针l指针:对象的地址指针:对象的地址l指针对象:存放指针的对

29、象指针对象:存放指针的对象l声明指针对象的语法:声明指针对象的语法:T*T*标识符;标识符;int*pointer;int*pointer;l一个指针对象被赋值为一个对象的地址一个指针对象被赋值为一个对象的地址后,称指针指向对象。后,称指针指向对象。第八十九页,本课件共有157页90为指针对象引入的两种操作为指针对象引入的两种操作l&-&-取地址操作取地址操作l*-目标操作目标操作第九十页,本课件共有157页91第九十一页,本课件共有157页92第九十二页,本课件共有157页93第九十三页,本课件共有157页94第九十四页,本课件共有157页956.2数组和指针l数组:一组类型相同的对象l声明

30、语法:类型标识符元素个数;l数组元素可以用下标引用数组名index;l数组元素也可以用指针引用第九十五页,本课件共有157页96数组和指针l通过指针引用数组元素定义指针对象数组的地址赋值给指针对象。l指针引用数组元素的方法*(pointer+n)pointern第九十六页,本课件共有157页97对象数组l没有为数组指定显式初始值时,数组元素使用缺省值初始化,当定义对象数组时,类中必须定义一个缺省的构造函数。第九十七页,本课件共有157页98举例第九十八页,本课件共有157页996.3引用l是标识对象的一种机制(是对象的一个别名)l一般用作参数类型、函数返回类型。l一般语法如下:基本类型&标识符

31、l一个引用不是独立的对象,只是对另一个对象的引用。基本类型&标识符=对象;第九十九页,本课件共有157页100第一百页,本课件共有157页101第一百零一页,本课件共有157页102栈对象与堆对象l在程序运行中根据需要在堆内存中创建的对象,使用完成后随时被删除。l创建语法如下:T*ptr=new T(初始值列表);l删除语法如下:delete ptr;l数组对象的创建int*ptr=new int10;l数组对象的删除 delete ptr;第一百零二页,本课件共有157页103第一百零三页,本课件共有157页104第一百零四页,本课件共有157页105第一百零五页,本课件共有157页1066

32、.4指针数组l数组元素的类型是指针,这样的数组称指针数组。l语法:T*标识符元素个数;第一百零六页,本课件共有157页107多维数组与指针l多维数组可以解释为其元素是多维数组的一维数组。第一百零七页,本课件共有157页1086.5this指针l一个成员函数被调用时,被自动传递一个隐含的参数,该参数是一个指向正被该函数操作的对象的指针,在程序中可以用this引用它,因此称其为this指针。第一百零八页,本课件共有157页1096.6具有子对象的类类型l用内部包含子对象的类实现复杂的类l子对象的初始化第一百零九页,本课件共有157页110第一百一十页,本课件共有157页111第一百一十一页,本课件

33、共有157页112第一百一十二页,本课件共有157页113第七章第七章 操作符重载操作符重载l当使用操作符来表达对对象的某个操作当使用操作符来表达对对象的某个操作时,可以将操作符函数声明为类的成员时,可以将操作符函数声明为类的成员函数或类的友员函数。函数或类的友员函数。l操作符的参数个数、优先级、结合性和操作符的参数个数、优先级、结合性和使用语法是由使用语法是由C+C+规定的,不能被改变。规定的,不能被改变。l重载操作符的形参不能具有缺省值。重载操作符的形参不能具有缺省值。l重载操作符的返回值类型任意,但最好重载操作符的返回值类型任意,但最好不是不是void void。第一百一十三页,本课件共

34、有157页1147.17.1重载为类的成员函数重载为类的成员函数第一百一十四页,本课件共有157页115重载为类的成员函数重载为类的成员函数第一百一十五页,本课件共有157页116重载为类的成员函数重载为类的成员函数第一百一十六页,本课件共有157页117重载为类的成员函数重载为类的成员函数第一百一十七页,本课件共有157页1187.27.2重载为类的友元函数重载为类的友元函数第一百一十八页,本课件共有157页119重载为类的友元函数重载为类的友元函数第一百一十九页,本课件共有157页120重载为类的友元函数重载为类的友元函数第一百二十页,本课件共有157页121重载为类的友元函数重载为类的友

35、元函数第一百二十一页,本课件共有157页1227.37.3两种方法的比较两种方法的比较l一元函数最好重载为成员函数一元函数最好重载为成员函数l二元函数一般重载为友元函数二元函数一般重载为友元函数27.5+27.5+x xl赋值操作符只能重载为成员函数赋值操作符只能重载为成员函数27.5=27.5=x xl+和和-操作符有两种形式,一般被重载操作符有两种形式,一般被重载为成员函数为成员函数其中后缀操作重载后带有一个整型参数。其中后缀操作重载后带有一个整型参数。第一百二十二页,本课件共有157页123两种方法的比较两种方法的比较l下标操作符只能被重载为成员函数下标操作符只能被重载为成员函数l函数调

36、用操作符可以看作是下标操作符函数调用操作符可以看作是下标操作符的扩展的扩展第一百二十三页,本课件共有157页124第八章第八章 继承与多态性继承与多态性 l通过已有的类进行扩展产生新类的过程通过已有的类进行扩展产生新类的过程l产生的新类称派生类产生的新类称派生类l产生派生类的类称基类或父类。产生派生类的类称基类或父类。l从一个基类派生称单基继承,从多个基从一个基类派生称单基继承,从多个基类派生称多基继承。类派生称多基继承。第一百二十四页,本课件共有157页125MouseScreenDeviceKeyboardTreeAppleTreeFruit第一百二十五页,本课件共有157页1268.1继

37、承第一百二十六页,本课件共有157页127访问控制l访问控制用于控制基类中声明的名字在多大的范围内能够被派生类的用户访问l访问控制有三种public,protected,private基类模块派生类模块间接派生类模块其他程序模块第一百二十七页,本课件共有157页128第一百二十八页,本课件共有157页129公有继承第一百二十九页,本课件共有157页130私有继承第一百三十页,本课件共有157页131在派生类中访问基类成员第一百三十一页,本课件共有157页132保护的成员l对V模块是publicl对H模块是private第一百三十二页,本课件共有157页133多继承l可以将其视为单继承来考察,每

38、个基类与派生类的关系可以当做单基继承。第一百三十三页,本课件共有157页1348.2构造函数和析构函数l派生类的数据成员由属于基类的部分和属于自己的部分组成,属于基类的部分初始化应由基类的构造函数完成。l构造函数不被继承,派生类必须调用基类的构造函数来初始化属于基类的部分数据成员。l一般形式如下:C:C(参数表0):C1(参数表1),C2(参数表2),Cn(参数表n)第一百三十四页,本课件共有157页135构造函数和析构函数l如果冒号右边的某个基类的构造函数参数表为空,则可以省略该项。l构造对象时,先执行基类的构造函数,然后执行派生类的构造函数。析构时则相反。l多基继承时基类构造函数的执行顺序

39、由继承时的顺序决定(从左向右),与初始化列表中的顺序无关。第一百三十五页,本课件共有157页136构造函数和析构函数第一百三十六页,本课件共有157页137构造函数和析构函数第一百三十七页,本课件共有157页138构造函数和析构函数第一百三十八页,本课件共有157页1398.3二义性l如果派生类的一个表达式引用基类中不止一个成员,则存在二义性。l解决二义性的办法是加类限定符。第一百三十九页,本课件共有157页140二义性第一百四十页,本课件共有157页141二义性l如果一个派生类是从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的标识符进行访问时可能产生二义性。第一百四十一页,

40、本课件共有157页142二义性BbB1b1Cf(),dBbB2b2第一百四十二页,本课件共有157页143二义性第一百四十三页,本课件共有157页144虚基类l为避免一个基类在多条继承路径上造成在派生类中产生多个基类子对象,可以采用虚基类技术。l语法如下class B1:virtual public Bclass B2:virtual public Bclass C:public B1,public B2第一百四十四页,本课件共有157页特殊成员函数讨论l拷贝构造函数拷贝构造函数l赋值赋值145第一百四十五页,本课件共有157页拷贝构造函数l用一个对象初始化一个正在建立的同类用一个对象初始化一

41、个正在建立的同类对象。对象。l拷贝构造函数的参数是引用参数。拷贝构造函数的参数是引用参数。l每个类都有一个拷贝初始化构造函数每个类都有一个拷贝初始化构造函数l如未定义,则编译器自动生成一个。如未定义,则编译器自动生成一个。l功能:功能:用作为初始值的对象的每个数据成员初始化用作为初始值的对象的每个数据成员初始化正建立对象的对应的数据成员。正建立对象的对应的数据成员。146第一百四十六页,本课件共有157页用途l以值调用方式传递参数时l函数返回对象时147第一百四十七页,本课件共有157页赋值l当需要进行对象之间的赋值操作时,必须定义赋值操作。l为与习惯一致,一般用作为=赋值操作符l当使用操作符

42、作为函数名时,必须与关键字operator合用。l赋值操作的参数最好用引用方式。148第一百四十八页,本课件共有157页l赋值操作的参数最好采用引用方式。l赋值操作的最好返回对被赋值对象的引用。l一般形式:X&X:operator=(const X&p);149第一百四十九页,本课件共有157页编译器产生的拷贝初始化和赋值操作的缺陷l当类中声明有指针数据成员时,将产生问题。150第一百五十页,本课件共有157页派生类的赋值和初始化l如未定义拷贝构造函数和赋值操作,则编译器提供。l如自定义,则应在实现中调用基类的拷贝构造函数和赋值操作。151第一百五十一页,本课件共有157页1528.4 8.4

43、 虚函数与多态性虚函数与多态性l如果类型如果类型S S是从类型是从类型T T共有继承的,则称共有继承的,则称类型类型S S是类型是类型T T的子类型。的子类型。l类型类型S S的指针或引用可以适用于类型的指针或引用可以适用于类型T T的的指针或引用的场合。指针或引用的场合。第一百五十二页,本课件共有157页153动态绑定与虚函数动态绑定与虚函数l由于在基类和派生类中,相同的名字由于在基类和派生类中,相同的名字执行的操作可能不同,所以基类的执行的操作可能不同,所以基类的成员函数在派生类中经常有不同的成员函数在派生类中经常有不同的实现。实现。l用用virtualvirtual关键字可以实现动态绑定。关键字可以实现动态绑定。l动态绑定只适用于虚函数的参数是指动态绑定只适用于虚函数的参数是指针或引用的情况。针或引用的情况。第一百五十三页,本课件共有157页154动态绑定与虚函数动态绑定与虚函数第一百五十四页,本课件共有157页155动态绑定与虚函数动态绑定与虚函数第一百五十五页,本课件共有157页156动态绑定与虚函数第一百五十六页,本课件共有157页157纯虚函数与抽象类纯虚函数与抽象类第一百五十七页,本课件共有157页

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

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁