C++课件:第4章 类和对象.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++课件:第4章 类和对象.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+课件:第4章 类和对象 C+ 课件 对象
- 资源描述:
-
1、第4章 类和对象第第4章章 类和对象类和对象 4.1 面向对象的思想面向对象的思想4.2 面向对象程序设计的基本特点面向对象程序设计的基本特点 4.3 面向对象的方法面向对象的方法 4.4 面向对象的标记面向对象的标记 4.5 类和对象类和对象 4.6 构造函数和析构函数构造函数和析构函数 4.7 类的组合类的组合 4.8 类模板类模板 第4章 类和对象4.1 面向对象的思想面向对象的思想 C+是一种面向对象的程序设计语言,使用它可以实现面向对象的程序设计。在介绍其面向对象的特性之前,我们先来了解一下面向对象程序设计的特点,以及它与传统的结构化程序设计的联系与本质差别。第4章 类和对象 4.1
2、.1 结构化程序设计 使用早期的计算机语言编写较大的程序时,由于当时未采用结构化的程序设计方法,使得程序的阅读、理解和调试都非常困难,对程序进行维护或增加新的功能几乎是一件不可能的事情。第4章 类和对象 20世纪60 年代以来,提出了结构化程序设计的概念,它的产生和发展形成了现代软件工程的基础。结构化程序设计建议采用有含义的变量名、实现程序的全局和局部范围以及一种面向过程的自顶向下编程方法,它的基本思想是:自顶向下,逐步求精,将整个程序结构划分成若干个功能相对独立的子模块,并要求这些子模块间的关系尽可能简单;子模块又可继续划分,直至最简;每一个模块最终都可用顺序、选择、循环三种基本结构来实现。
3、第4章 类和对象 结构化程序设计可以有效地将一个复杂的问题分解为若干个易于处理的子问题,每一个子问题都可以独立地编程解决,从而将整个程序划分成多个子模块或过程,因此,结构化程序设计是一种面向过程的程序设计方法。在结构化程序设计方法中,程序的基本构成单位是函数或者过程。第4章 类和对象 结构化程序设计方法有许多优点:各模块可以分别编写,使得程序更易于阅读、理解、测试和修改;方便增加新的功能模块;功能独立的模块可以组成子程序库,有利于实现软件的复用。结构化程序设计的方法出现之后,立即为广大的程序设计人员所接受并广泛使用,成为程序设计的主流方法。第4章 类和对象 由于结构化程序设计方法是面向过程的,
4、以解决问题的过程作为程序的基础和重点,因此,在方法上存在着不足。在结构化程序设计中,把程序定义为“数据结构+算法”,数据与处理这些数据的过程是分离的。这样,对不同格式的数据作相同的处理,或是对相同的数据作不同的处理,都需要不同的程序模块来实现,使得程序的可复用性并不好。同时,由于过程和数据相分离,数据可能被多个模块所使用和修改,很难保证数据的安全性和一致性。 第4章 类和对象 4.1.2 面向对象程序设计 面向对象的程序设计技术是完成程序设计任务的一种新方法,它汲取了结构化程序设计中最为精华的部分。“面向对象程序设计是被结构化的结构化程序设计。它是软件开发的第二次变革,是程序结构的统一理论”。
5、 在面向对象程序设计中,将对象作为构成软件系统的基本单元,并从相同类型的对象中抽象出一种新型的数据结构类。 第4章 类和对象 对象是类的实例。类是一种区别于其它各种一般数据类型的特殊类型。类的成员中不仅包含有描述类对象属性的数据,还包含对这些数据进行处理的程序代码,称之为对象的行为(或操作)。对象将其属性和行为封装在一起,并将其内部大部分的实现细节隐藏起来,仅通过一个可控的接口与外界交互。 面向对象程序设计不仅实现了数据抽象,而且通过抽象出相关类的共性,而形成一般类(基类),并在此基础上,采用继承的方式,对一般类增添不同的特性而派生出多种特殊类(派生类),从而建立了类与类之间的多层结构关系,为
6、软件复用提供了有效的途径。第4章 类和对象 面向对象程序设计支持多态性。多态性与继承性相结合,使不同结构的对象可以以各自不同的方式响应同一消息。 软件系统的对象之间存在着依存关系,对象之间通过消息联系。面向对象程序设计中,消息表现为对象在起操作过程中对另一个对象的服务程序的调用。第4章 类和对象4.2 面向对象程序设计的基本特点面向对象程序设计的基本特点 4.2.1 抽象性 抽象是指从具体的实例中抽取出共同的性质并加以描述的过程。比起面向过程的程序设计,面向对象程序设计更加强调抽象性。在面向对象方法中,抽象是通过对一个系统进行分析和认识,强调系统中某些本质的特性,而对系统进行的简化描述。第4章
7、 类和对象 一般,对问题的抽象包括两个方面:数据抽象和行为抽象。数据抽象为程序员提供了对对象的属性和状态的描述,行为抽象则是对这些数据所需要的操作的抽象。 抽象的过程是通过模块化来实现的,即通过分析将一个复杂的系统分解为若干个模块,每个模块是对整个系统结构的某一部分的一个自包含的和完整的描述。同时,对模块中的细节部分进行信息隐藏,用户只能通过一个受保护的接口来访问模块中的数据。这个接口由一些操作组成,定义了该模块的行为。第4章 类和对象 看一个简单的例子。假设我们需要在计算机上实现一个绘制圆形的程序。通过对这个图形的分析,可以看出需要三个数据来描述该圆的位置和大小,即圆心的横、纵坐标以及圆的半
8、径,这就是对该圆形的数据抽象。另外,该图形应该具有设置圆心坐标、设置半径大小、绘制圆形等功能,这就是对它的行为抽象。用C+语言可以将该图形描述如下:第4章 类和对象圆形 (circle):数据抽象:double x,y,r;行为抽象:setx( );sety( );setr( );draw( );抽象是面向对象方法的核心。第4章 类和对象 4.2.2 封装性 封装是面向对象方法重要的原则。所谓封装,就是将一个事物包装起来,使外界不了解它的详细内情。在面向对象方法中,把某些相关的代码和数据结合在一起,形成一个数据和操作的封装体,这个封装体向外提供一个可以控制的接口,其内部大部分的实现细节则对外隐
9、藏,从而达到对数据访问权限的合理控制。封装可以使得程序中各部分之间的相互影响达到最小,并且提高程序的安全性,简化代码的编写工作。第4章 类和对象 对象是面向对象程序语言中支持并实现封装的机制。对象中既包含有数据(即属性),又包含有对这些数据进行处理的操作代码(即行为),它们都称为对象的成员。对象中的成员可以定义成公有的或私有的。私有成员即在对象中被隐藏的部分,不能被该对象以外的程序访问;公有成员则提供对象与外界的接口,外界只能通过这个接口与对象发生联系。可以看到,对象有效实现了封装的两个目标对数据和行为的包装和信息隐藏。第4章 类和对象 4.2.3 继承性 继承是软件复用的一种方式,通过继承,
10、一个对象可以获得另一个对象的属性,并加入属于自己的一些特性。继承提供了创建新类的一种方法,即从现有类创建新类。新类继承了现有类的属性和行为,并通过对这些属性和行为进行扩充和修改,增添自己特有的一些性质。第4章 类和对象 继承简化了人们对系统的认识和描述。我们可以通过对一些有内在联系的类进行分析,抽象出这些类中所包含的共性,从而形成一般类的概念。在一般类的基础上,增添每个具体的类所具有的特性,就形成了各个不同的特殊类。特殊类的对象拥有一般类的全部属性和操作,我们称为特殊类对一般类的继承。在特殊类中,我们不必考虑继承来的属性和行为,只需着重研究它所特有的那些性质就可以了。这就好像在现实世界中,我们
11、已知房子是建筑物这一概念的继承,则房子这一概念具有建筑物的所有特点,还同时包含有它自身所特有的一些属性。第4章 类和对象 一个一般类可以派生出多个特殊类,不同的特殊类在一般类的基础上增加了不同的特性。一个类也可以继承多个一般类的特性,这称之为多继承。 继承是很重要的概念。继承支持多层分类的概念,使得一个个原来彼此孤立的类有效地组织起来,形成层次结构关系。倘若不使用多层分类的概念,对每个对象的清晰描述都要穷尽其特征,而采用继承的概念描述一个对象,只需在一般类特征的基础上加上该对象的一些专有特性即可。第4章 类和对象 4.2.4 多态性 多态性也是面向对象程序设计的重要特性之一。简单地说,多态性就
12、是一个接口,多种方式。在基类中定义的属性和操作被派生类继承之后,可能具有不同的数据类型或表现出不同的行为,我们称之为多态性。也就是说,多态性表现为同一属性或操作在一般类及各特殊类中具有不同的语义。从同一基类派生出来的各个对象具有同一接口,因而能响应同一格式的信息,但不同类型的对象对该信息响应的方式不同,导致产生完全不同的行为。在这里,消息一般是指对类的成员函数的调用,而不同的行为即用不同的函数实现。第4章 类和对象 很明显,实现多态性的好处在于,为这类对象提供服务时,不必区分具体是哪种对象,只需发送相同的消息即可,而由各个对象去以适合自身的方式进行不同的响应。 举一个简单的例子。编制绘图程序时
13、,不同的图形其绘制的方式是不同的。我们可以声明一个基类“几何图形”,该类中定义一个“绘图”行为,并定义该类的派生类“直线”、“椭圆”、“多边形”等,这些类都继承了基类中的“绘图”行为。在基类的“绘图”行为中,由于图形类型尚未确定,所以并不明确定义如何绘制一个图形的方法,而是在各派生类中,根据具体需要对“绘图”重新定义。这样,当对不同对象发出同一“绘图”命令时,各对象调用自己的“绘图”程序实现,绘制出不同的图形。第4章 类和对象4.3 面向对象的方法面向对象的方法 前面我们已经给出了面向对象程序设计的基本思想及其特性,本节将对面向对象的方法做一个更深入的探讨。 要了解面向对象的概念,首先要知道什
14、么是对象。对象在现实世界中是一个实体或者一种事物的概念。现实世界中的任何一个系统都是由若干具体的对象构成。作为系统的一个组成部分,对象为其所在的系统提供一定的功能,担当一定的角色。所以,对象可以看作是一种具有自身属性和功能的构件。第4章 类和对象 我们在使用一个对象时,并不关心其内部结构及实现方法,仅仅关心它的功能和它在系统中的使用方法,也就是该对象提供给用户的接口。举个例子,对电视机这个对象来说,我们并不关心电视机的内部结构或其实现原理是怎样的,只关心如何通过按钮来使用它。这些按钮就是电视机提供给用户的接口。至于电视机内部结构原理,对用户来说是隐藏的。分析一个系统,也就是分析系统由哪些对象构
15、成,以及这些对象间的相互关系。第4章 类和对象 我们知道,软件开发的目的是为了进行数据处理,因此,在程序中包含有数据和与之相关的代码。这些数据和对它进行操作的代码是密切相关、不可分离的,没有数据的代码和没有代码的数据同样是没有意义的。 在面向对象方法中,我们采用与现实世界相一致的方式,将对象定义为一组数据及其相关代码的结合体,其中数据描述了对象的属性,对数据进行处理的操作则描述了对象的功能,而软件系统由多个这样的对象构成。对象将其属性和操作的一部分对外界开放,作为它的对外接口,而将大部分的实现细节隐藏,这就是对象的封装性。外界只能使用上述定义的接口与对象交互。第4章 类和对象 面向对象的方法中
16、进一步引入了类的概念。所谓类,就是同样类型对象的抽象描述。对象是类的实例。类是面向对象方法的核心。对相关的类进行分析,抽取这些类的共同特性,形成基类的概念。通过继承,派生类可以包含基类的所有属性和操作,还可以增加属于自己的一些特性。通过继承,可以将原来一个个孤立的类联系起来,形成清晰的层次结构关系,称为类簇。第4章 类和对象 一个系统由多个对象组成。其中复杂对象可以由简单对象组合而成,称之为聚合。对象之间存在着依存关系,一个对象可以向另一个对象发送消息,也可以从其它对象接收消息,对象之间通过消息彼此联系,共同协作。对象以及对象之间的这种相互作用构成了软件系统的结构。 综上所述,面向对象的方法就
17、是利用抽象、封装等机制,借助于对象、类、继承、消息传递等概念进行软件系统构造的软件开发方法。 第4章 类和对象4.4 面向对象的标记面向对象的标记 在面向对象程序设计中,我们可以使用面向对象标记图,将系统的构成更加直观地表述出来。面向对象标记图应该能够准确清楚地描述以下四个问题:类、对象、类及对象的关系、类及对象之间的联系。 面向对象的标记方法有很多种,其中UML(Unified Modeling Language,统一建模语言)是目前国际上确定的标准标记方法。它是一种比较完整的支持可视化建模的工具,但其比较复杂,我们在这里不做介绍。 第4章 类和对象 本节我们介绍一种比较简单和直观的标记方法
18、Cord/Yourdon标记。Cord/Yourdon标记无法对类和对象的成员的访问控制权限进行有效地描述,但这种标记方法图形简单,易于理解,而且可以清晰地表示出类和对象的相互关系和联系。 Cord/Yourdon标记中有两类图形符号:表示符号和连接符号。表示符号用来表示类和对象。 Cord/Yourdon标记中用一个圆角矩形来表示类。矩形内部分为三个部分,上部是类名,中部表示该类的数据成员,下部则表示该类的成员函数。 第4章 类和对象 图4-1给出了类的标记方法和一个point类的标记实例。point类将在本章的后面部分定义和使用。图4-1 类的标记图 类名数据成员成员函数 pointint
19、 x,y;point(int,int);point(point);int getx();int gety();第4章 类和对象 对象是类的实例。在Cord/Yourdon标记中,对象是在相应类标记外加一个圆角矩形框,如图4-2所示。p1是point类的一个对象,表示屏幕上的一个点。 图4-2 对象的标记图 对象名数据成员成员函数 p1int x,y;point(int,int);point(point);int getx();int gety();第4章 类和对象 连接符号主要有三种,它们分别表示消息联系、继承关系和包含关系,如图4-3所示。图4-3 Cord/Yourdon标记中的连接符号
20、第4章 类和对象图4-3 Cord/Yourdon标记中的连接符号 第4章 类和对象 下面给出了一个采用Cord/Yourdon标记描述的关系图,描述了两个类distance类与point类之间的关系。distance类表示屏幕上两个点的距离,该类中包含有两个point类的对象p1和p2。从标记图4-4中可以清楚的看出这两个类之间的组合关系,有关的具体内容将在后续章节介绍。 第4章 类和对象图4-4 distance类与point类的关系图p1int x,y;point(int,int);point(point &);int getx();int gety();p2int x,y;point(
21、int,int);point(point &);int getx();int gety();distancepoint p1,p2;double dist;distance(point,point)double getdis();第4章 类和对象4.5 类类 和和 对对 象象 类是面向对象程序设计的基础和核心,也是实现数据抽象的工具。在面向过程的结构化程序设计中,组成程序的基本构件是函数。函数由若干相关语句构成,完成对某些数据的处理。由于这些函数和数据之间是相对独立的,使程序修改起来比较麻烦,而且难以保证数据的可靠性和一致性。而在面向对象的程序设计中,将彼此相关的数据和与这些数据相关的操作(函
22、数)封装在一起,形成类这样一种新的具有更高的集成性和抽象性的数据类型。第4章 类和对象 类实际上相当于一种特殊的用户自定义的数据类型,但它和一般的数据类型有着不同之处:类中不仅包含有一组相关的数据,还包含能对这些数据进行处理的函数。类中的数据具有隐藏性和封装性,类是实现C+的许多高级特性的基础。 我们可以声明属于某个类的变量,这种变量称之为类的对象。在C+中,类和对象的关系实际上是数据类型和具体变量的关系。在程序中可以通过类定义中提供的函数访问该类对象的数据。第4章 类和对象 4.5.1 类的声明 类的声明即类的定义。声明一个类的语法与结构的声明类似,其一般形式如下: class privat
23、e: public: ; 第4章 类和对象 其中,class是声明类的关键字;是标识符,表示声明的类的名字;类声明体内的函数和变量称为这个类的成员,分别称为成员函数和数据成员;public、private等关键字用来说明类的成员的访问控制属性。 类的成员函数用于对数据成员处理,又称为“方法”。程序中通过类的成员函数来访问其内部的数据成员。成员函数是类与外部程序之间的接口。在类的声明体中只需声明成员函数的原型,成员函数的具体实现可放在类外定义。第4章 类和对象通常采用下面的形式定义成员函数: : () 下面的例子就是一个简单的类的说明。第4章 类和对象【例4-1】 类的声明例题。class my
24、classprivate: int a;public:void set_a(int num);int get_a( );void myclass:set_a(int num)第4章 类和对象a=num;int myclass:get_a( )return a;第4章 类和对象 4.5.2 类成员的访问控制 在缺省情况下,类中说明的所有函数和变量都为这个类所私有,也就是说,这些函数和变量只能在该类成员函数的实现中被访问。为了说明某些成员是公有成员(可以被其它类的成员访问的成员称为公有成员),必须使用关键字public,并在后面加上冒号。这样,限定词public之后的所有变量和函数不但可以被同一个
25、类的其它成员访问,还可以被程序中该类以外的对象访问。第4章 类和对象 一般,C+中定义类时,可将类的各个成员划分成不同的访问级别。这可以通过在所说明的成员前面加上访问控制属性来实现。C+规定有三种访问控制属性:public表示成员是公有的,private表示成员是私有的,protected则表示成员是受保护的。第4章 类和对象 公有成员可以由程序中的任何函数访问,而私有成员只允许本类的成员函数访问,任何外部程序对它进行访问都是非法的。可以看到,私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员,这些数据成员用户无法访问,只有通过成员函数或某些特殊说明的函数才可引用;而公有
展开阅读全文