205-9-1计算机程序计-第9章 类和对象(一)(zpyang).ppt_第1页
205-9-1计算机程序计-第9章 类和对象(一)(zpyang).ppt_第2页
205-9-1计算机程序计-第9章 类和对象(一)(zpyang).ppt_第3页
205-9-1计算机程序计-第9章 类和对象(一)(zpyang).ppt_第4页
205-9-1计算机程序计-第9章 类和对象(一)(zpyang).ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

计算机程序设计 第9章类与对象 1 主讲 杨振平E mail zpyang 2011 2012第二学期 面向对象的概念类与对象成员函数对象的访问对象的存储 授课内容 一 面向对象的基本概念 回顾 面向过程程序设计以功能为中心 使用函数对数据结构进行操作 但又将函数与操作的数据分离开来 各自成为独立的部分 程序 数据结构 算法 描述问题 解决问题 算法顺序结构分支结构循环结构 回顾 面向过程程序设计以功能为中心 使用函数对数据结构进行操作 但又将函数与操作的数据分离开来 各自成为独立的部分 面向对象程序设计以自然方式观察世界 即客观世界由实体组成 实体都有一些属性和行为 面向对象程序设计中用对象模拟实体 用数据和方法表示对象的属性和行为 程序由相互作用的对象构成 对象之间通过发送消息进行交互 程序 对象1 对象n 数据1 数据n 方法1 方法n 描述问题 解决问题 面向对象程序设计方法的基本概念 抽象 对具体的对象 问题 进行概括 从同类对象中抽出与目标有关的公共性质并加以描述 包括 数据抽象 描述某类对象的属性或状态 代码抽象 描述某类对象的共有的行为特征或具有的功能 数据抽象 intHour intMinute intSecond代码抽象 voidSetTime int int int voidShowTime 抽象概念举例1 时钟 数据抽象 doubleRadius High 代码抽象 voidSetInitData doubler doubleh voidShowInitData doubleArea doubleVolume 抽象概念举例2 圆柱体 封装 将抽象得到的数据和代码 形成一个有机的 封闭的整体 目的 使用者只需要通过特定的外部接口使用对象的成员 而不必了解具体实现的细节 通过 类 声明 实现封装 类也是一种由用户定义的数据类型 也称为抽象数据类型 面向对象程序设计方法的基本概念 续 面向对象程序设计方法的基本概念 续 类 是对具有相同属性和操作方法的一组对象的抽象描述 它是面向对象程序主要的构造单位 是对象生成的模板 利用类可以实现数据和代码的封装 隐藏 类可以被继承并产生新的派生类 private intHour Minute Second public voidSetTime int intint voidShowTime classClock 外部接口 访问权限 例 对 时钟 的抽象数据类型声明如下 继承 实现层次类的一种机制 允许对原有类进行更具体的说明 从而产生新的类 派生类 例 从 人员 类中派生出 学生 类和 教师 类 人员类 学生类 教师类 多态 允许对象对同一个消息做出不同的响应 执行不同的操作 多态性是通过函数重载 虚函数技术实现 面向对象程序设计方法的优点 代码的可重用性好 开发时间短 效率高可维护性和可扩充性好稳定性好适合于大型复杂程序的开发 根据问题对象 首先确定 类 即抽取出需要处理的数据和操作方法 类中的数据称为数据成员 类中的方法也称为成员函数 用面向对象方法编写的c 程序结构如下 类 main 或类 main 函数 用面向对象方法进行程序设计的关键 二 类与对象的声明和定义 类的声明 即定义抽象数据类型数据成员的声明成员函数的声明对象的定义 即定义类类型的变量 又称为实例对象的使用 访问对象的成员 类的声明格式 class 访问控制权限 访问控制权限 其中 访问控制权限对应的关键字private 私有成员 仅在类中使用public 公有成员 允许类外使用protected 保护成员 允许派生类使用 例如 时钟类classClock private intHour Minute Second public voidSetTime int int int voidShowTime 对象的定义 对象定义的一般形式 例 Clockclock1 clock2 类和对象的关系 相当于数据类型与变量的关系一样 三 成员函数 类的成员函数是函数的一种 与数据成员一样 也可被指定为 private public和protected 私有成员函数 只能被本类中其他成员函数所调用 不能被类外调用 公有成员函数 不仅被本类中其他成员函数所调用 也能被类外调用 它是类的对外接口 成员函数可以被重载 成员函数定义的格式 1 类中声明 类外定义 voidClock SetTime inth intm ints Hour h Minute m Second s classClock private intHour Minute Second public voidSetTime int int int voidShowTime 2 作为内联成员函数定义 classClock private intHour Minute Second public voidSetTime inth intm ints Hour h Minute m Second s voidShowTime classClock private intHour Minute Second public voidSetTime int int int voidShowTime inlinevoidClock SetTime inth intm ints Hour h Minute m Second s 类的作用域与封装 类的作用域在类的作用域中 成员函数可直接访问类的成员 而在类的作用域外 访问时会受到成员访问权限一定的限制 通常 数据成员定义为private 成员函数定义为public class类名 数据成员成员函数 2 类的作用域和成员访问权限体现了类的封装功能 例9 1定义一个Person类 用来说明人员类对象 classPerson private 数据成员部分charName 20 charSex intAge public 成员函数部分voidRegister char name charsex intage voidShowMe 在类外定义Person类成员函数 voidPerson Register char name charsex intage strcpy Name name Sex sex m m f Age age voidPerson ShowMe cout Name t Sex t Age endl 四 对象的访问 对类中成员的访问 在类的作用域内 成员函数可以直接使用该类中的成员名 在类的作用域外 通过对象名 成员名访问其public成员 例 intmain Personperson1 person1 Register Wang m 20 person1 ShowMe return0 类中成员的引用规则 使用对象名访问公有数据成员或成员函数需使用运算符 person1 Register Wang m 20 同类型对象之间可以整体赋值对象作函数的参数采用赋值调用函数可以返回一个对象 例9 3人事资料的输入输出 intmain charname 20 sex intage Personperson1 person2 定义对象cout name sex age person1 Register name sex age 调用公有函数cout person1 t person1 ShowMe 调用公有函数person1 Register Zhang3 m 19 cout person1 t person1 ShowMe person2 person1 对象之间的赋值cout person2 t person2 ShowMe return0 想一想如何读值 例9 4简单的日期类 classDate intday month year 默认为privatepublic voidinit int int int voidprint ymd 用两种不同的成员函数输出voidprint mdy voidDate init intyy intmm intdd month mm 1 voidDate print ymd cout year month day endl voidDate print mdy cout month day year endl 五 对象的存储 在C 中类对象所占空间的大小只取决于数据成员所占用的空间 即C 中为每个对象的数据成员分配有不同的存储空间 类中的成员函数仅分配一块存储空间 由各对象公用 阅读理解程序 classDate intday month year public voidinit intyy intmm intdd month mm 1 intmain Datedate1 cin date1 year date1 month date1 day cout date1 year date1 month date1 day endl cout sizeof date1 endl sizeof 求变量或类型的长度cout sizeof Date endl return0 程序设计举例 点类和圆类 在二维平面空间上 使用x y坐标可以确定一个点 确定了圆心坐标和半径后可以确定一个圆 声明一个点类 并使用点类对象作为数据成员声明一个圆类 注意 该例子中 使用了类的组合 接口与实现方法的分离概念 通常 将类的声明放在一个头文件中 形成类的public接口 类成员函数的定义放在另一个源文件中 形成类的实现方法 point h文件存放Point类的声明 ifndefPOINT H definePOINT HclassPoint intx y 点的x和y坐标public voidSetPoint int int 设置坐标intGetX returnx 取x坐标intGetY returny 取y坐标voidPrint 输出点的坐标 endif point cpp文件Point类的成员函数定义 includeusingnamespacestd include point h voidPoint SetPoint inta intb x a y b voidPoint Print cout x y circle h文件Circle类的声明 ifndefCIRCLE H defineCIRCLE H include point h classCircle private doubleRadius PointCenter 对象成员 public voidSetRadius double 设置半径voidSetCenter Point 设置圆心坐标doubleGetRadius 取半径PointGetCenter 取圆心doubleArea 计算面积voidPrint 输出圆心坐标和半径 endif circle cpp文件Circle类的成员函数定义 includeusingnamespacestd include circle h voidCircle SetRadius doubler Radius r 0 r 0 voidCircle SetCenter Pointp Center p PointCircle GetCenter returnCenter doubleCircle GetRadius returnRadius doubleCircle Area return3 14159 Radius Radius voidCircle Print cout Center Center Print cout Radius Radius endl Example9 8 cpp文件 CircleDemo includeusingnamespacestd include point h include circle h intmain Pointp center p SetPoint 30 50 center SetPoint 120 80 Circlec c SetCenter center c SetRadius 10 0 cout Pointp p Print cout nCirclec c Print cout Thecentreofcirclec c GetCenter Print cout nTheareaofcirclec c Area endl return0 在工程9 8中建立point h头文件 在工程9 8中建立point cpp文件 在9 8工程中

温馨提示

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

评论

0/150

提交评论