预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共62页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
教学目标●了解封装与数据隐藏的软件工程概念●了解数据抽象和抽象数据类型(ADT)的符号●生成C++的ADT(即类)●了解如何生成、使用和删除类对象●控制对象数据成员和成员函数的访问●开始认识面向对象的价值6.1简介下面开始介绍C++中的面向对象。为什么把C++中的面向对象推迟到第6章才开始介绍呢?原因是我们要建立的对象是由各个结构化程序组件构成,因此先要建立结构化程序的基础知识。在第1章到第5章的“有关对象的思考”小节中,我们介绍了C++中的面向对象编程的基本概念(即“对象思想”)和术语(即”对象语言”)。在这些”有关对象的思考”小节中,介绍了面向对象设计(object-orienteddesign,OOD)的方法:我们分析了典型问题的陈述,要求建立一个系统(电梯模拟程序),确定实现该系统所需的类,确定这些类对象的属性,确定这些类对象的行为,指定对象之间如何通过交互以完成系统的总体目标。下面简要介绍面向对象的一些关键概念和术语。OOP将数据(属性)和函数(行为)封装(encapsulate)到称为类(class)的软件包中,类的数据和成员是密切联系的。就像蓝图,建筑人员通过蓝图建造房子,而程序虽则通过类生成对象。一个蓝图可以多次复用.建造多幢房子;一个类也可以多次夏用,建立多个对象。类具有信息隐藏(informationhiding)属性,即类对象只知道如何通过定义良好的接口(interface)与其他类对象通信,但通常不知道其他类的实现方法,实现细节隐藏在类中。我们可以熟练地开车,而不需要知道发动机、传递系统和燃油系统的工作原理。我们可以看到信息隐藏对良好的软件工程是多么重要。在C语言和其他过程化编程语言(proceduralprogramminglanguage)中,编程是面向操作的(action-oriented),而在C++中,编程是面向对象的(object-oriented)。在C语言中,编程的单位是函数(function),而在C++中.编程的单位是类(class),对象最终要通过类实例化。C语言程序员的主要工作是编写函数,完成某个任务的一组操作构成函数,函数的组合则构成程序。数据在C语言中当然很重要,但这些数据只用于支持函数所要进行的操作。系统指定中的动词帮助C语言程序员确定一组用于实现系统的函数。C++程序员把重点放在生成称为类的用户自定义类型(user-definedtype),类也称为程序员定义类型(programmer-definedtype)。每个类包含数据和操作数据的一组函数。类的数据部分称为数据成员(datamember)。类的函数部分称为成员函数(memberfunction,有些面向对象语言中也称为方法)。int等内部类型的实例称为变量(variable),而用户自定义类型(即类)的实例则称为对象(object)。在C++中,变量与对象常常互换使用,C++的重点是类而不是函数。系统指定中的名词帮助C++程序员确定实现系统所需的用来生成对象的一组类。C++中的类是由C语言中的struct演变而来的。介绍C++类的开发之前.我们先使用结构建立用户自定义类型,通过介绍这种方法的缺点从而说明类的优点。6.2结构定义结构是用其他类型的元素建立的聚合数据类型。考虑下列结构定义:structTime{inthour;//0-23intminute;//0-59intsecond;//0-59};结构定义用关键字struct引入。标识符Time是个结构标志(structuretag),命名结构定义并声明该结构类型(structuretype)的变量。本例中,新类型名为Time。结构定义花括号中声明的名称是结构的成员(member)。同一结构的成员应有惟一名称.但两个不同结构可以包含同名成员而不会发生冲突。每个结构定义应以分号结尾。上述解释对后面要介绍的类也适用,C++中的结构和类是非常相似的。Time的定义包含三个int类型的成员hour、minute和second。结构成员可以是任何类型,一个结构可以包含不同类型的成员。但是,结构不能包含自身的实例。例如,Time类型的成员不能在Time的结构定义中声明,但该结构定义中可以包含另一Time结构的指针。当结构包含同一类型结构的指针时,称为自引用结构(self-referentialstructure)。自引用结构用于形成链接数据结构,如链表、队列、堆栈和树等(见第15章介绍)。上述结构定义并没有在内存中保留任何空间,而是生成新的数据类型,用于声明变量。结构变量和其他类型的变量一样声明。下列声明:TimetimeObject,timeArray[10],*timePtr.&timeRef=timeobject;声明timeObject为Time类型变量,timeA