面向对象复习2012信工.ppt_第1页
面向对象复习2012信工.ppt_第2页
面向对象复习2012信工.ppt_第3页
面向对象复习2012信工.ppt_第4页
面向对象复习2012信工.ppt_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

面向对象程序设计 第2页 面向对象的概述类及其对象的封装性友员 重载和引用继承与派生虚函数与多态性模板 面向对象设计 复习重点 第3页 面向对象的设计方法 1面向对象的思想2面向对象的基本概念3面向对象的基本特性4C 的初步知识 第4页 本章要求 熟悉面向对象的思想 理解面向对象的基本概念 对象 类 掌握面向对象的基本特性 封装性的特点 继承性的优点和多态性的含义 掌握C 比C增强的知识 函数原型与变量说明 输入输出 const说明符和void类型 第5页 面向对象的基本概念 对象类 第6页 面向对象的基本特性 封装性继承性多态性 第7页 函数原形说明变量的说明输入输出const说明符void类型 从C到C 第8页 const说明符 定义常量时 C语言用 define 而C 用const说明符 const在C 中的作用 1 代替 define宏定义常量例 defineMAX100可替代为 constintMAX 100 或intconstMAX 100 2 定义常量数组constfloatdata 1 2 2 5 3 6 4 8 5 5 第9页 const说明符 3 const说明符与函数参数相连接 例 voidprint value constintvalue cout value 试图在该函数体中改变const参量value的是非法的 第10页 const说明符 4 定义指针常量 根据const位置的不同含义也不同 有三种方式 1 指向常量的指针 说明一个指针变量指向的数据是常量 name是指向字符串常量的指针 name指向的字符串不能更改 但name可以更新 constchar name Richard name Martin 对name 0 C 错 第11页 const说明符 2 常指针 把指针本身声明为一个常量 而不是将它指向的对象声明为常量 name不能更改 name指向的内容可更新 char constname Richard name Martin 错name 0 C 对 3 指向常量的常指针 这个指针本身不能改变 它指向的值也不能改变 name不能更改 name指向的内容也不能更新 constchar constname Richard name Martin 错name 0 C 错 第12页 C 类及其对象的封装性 1类的声明和对象定义2类的成员函数3对象成员的引用4构造函数和析构函数5对象指针6动态存储 第13页 掌握类的定义和使用方法 类的声明包括数据 数据成员 和函数 成员函数 私有成员和公有成员 掌握对象的定义和使用方法 掌握对象的存储空间及成员函数的存储方式 对象的存储空间只计算数据成员的存储空间 构造函数对对象初始化 构造函数与类同名 可以接受参数 允许重载 构造函数不能显式调用 本章要求 第14页 析构函数执行与构造函数相反的操作 完成某些清理内存的任务 例如释放对象占用的内存空间 new申请存储空间 delete释放用new申请的存储空间 配对使用 动态创建对象 本章要求 第15页 缺省参数的构造函数 部分参数缺省时 规则是 所有取缺省值的参数必须出现在不取缺省值的参数的右边 即所有的缺省参数是参数表中最后的参数 第16页 point intx inty 0 对point intx 0 inty 错voidf1 inti intj intk 10 对voidf2 char str intx 1 inty 1 对voidf3 inti intj 10 intk 错 第17页 多构造函数 在一个类中有几个构造函数 适合不同的场合 用它们所带参数的个数或类型的不同而区分 定义多构造函数时 参数的个数或类型上必须存在差异 否则会有二义性 在定义多个构造函数 又使用缺省参数时 特别要注意防止出现二义性 第18页 使用缺省参数的构造函数注意 在构造函数中使用缺省参数提供了建立对象的多种初始化方法 相当于多个重载的构造函数 应该在声明构造函数时指定参数的缺省值 而不能只在定义构造函数时指定缺省值 如果构造函数的全部参数都指定了缺省值 则在定义对象时可以不给出 或给出一个 几个实参 在一个类中定义了全部缺省参数的构造函数后 不能再定义重载构造函数 否则会出现二义性 Box int 10 int 10 int 10 指定全部参数为缺省参数Box 声明无参构造函数 是重载构造函数Box int int 声明有2个参数的构造函数若有以下语句 Boxbox1 无法确定调用第1个 还是第2个构造函数 Boxbox2 15 30 无法确定调用第1个 还是第3个构造函数 第19页 动态存储 C 使用new来动态分配存储空间 使用delete来动态释放存储空间 优点 new自动计算要分配的类型的大小 自动返回正确的指针类型 不必对返回指针进行类型转换可以用new将分配的对象初始化 第20页 new的语法格式 名字指针 new名字 名字初始化值 int s s newint 200 若用new分配的类型为数组 需要在类型名后缀上数组的大小 如 int p newint 10 若创建多维数组 必须提供所有维的大小如 int q a 2 3 4 第21页 delete的语法格式 delete名字指针名字指针是指将要被释放的那一块存储空间的起始地址 此存储空间一定是用new分配的 若所释放的是整个数组占用的空间 可写成delete p 释放时不需给出数组的大小 第22页 析构函数 析构函数一般用于收回对象中成员所占的存储空间 析构函数名字与类名相同 只是在前面加了一个符号 它不接受任何参数 也不返回任何说明的类型和值 一般析构函数由一系列的delete组成 第23页 友元 重载和引用 友元 friend 即类的朋友 不同类的成员函数之间 类的成员函数与一般函数进行数据共享的机制 重载 overloading 同一 符号 在同一作用域的不同场合具有不同的语义 实现算法 引用 reference 即对象的别名 第24页 本章要求 友元 打破了类的数据封装机制 允许类以外的函数可以访问类对象的私有数据 友元分为友员函数 友元成员和友元类 使用时注意友元的声明和定义 重载 是C 的多态性 同一标识符在不同的场合具有不同的语义 函数重载有构造函数重载 成员函数和非成员函数重载 运算符重载有种形式 重载为类的成员函数和重载为类的友元函数 引用 即对象的别名 在创建引用时初始化 且不能再赋值 对引用的操作就是对目标的操作 用引用传递参数可改变实参的值 用引用传递对象对象可节省内存 引用函数可被赋值 第25页 友元的说明和定义 将外界的某个对象说明为某一个类的友员 这个外界对象就可以访问这个类对象中的私有成员 声明为友员的外界对象既可以是另一个类的成员函数 也可以是不属于任何类的一般的函数 还可以是整个的一个类友员声明包含在其私有成员可被访问的类的定义中 此声明可放在公有部分 也可放在私有部分 第26页 友元函数 在一个类中说明的某个函数不是该类的成员函数 而是独立于任何类的一般的外界函数 它可以访问该类中所有对象的私有成员 定义时 在函数名前加上关键词friend 第27页 友元类 友元可以是一个类 作为友元的类中的所有成员函数都可以访问另一个类中的私有成员 第28页 函数重载 两个以上的函数 只要使用不同类型的参数或参数个数不同 编译器便知道在什么情况下该调用哪一个函数 这就叫函数重载 构造函数重载类成员函数重载类以外的一般函数重载 第29页 运算符重载 用成员函数重载运算符用友元重载运算符运算符 和 的重载赋值运算符的重载 第30页 引用 引用的概念引用参数引用返回值 第31页 引用的概念 引用就是给对象取一个别名 它主要用在给函数传递大型的对象 从函数中返回左值 也可以独立引用 引用定义的关键词是type创建了一个整型引用j j是i的地址的别名 j是i的同义词 它们表示同一个对象 第32页 在定义引用时 马上就要对它进行初始化 不可定义完后再赋值 对对象或对引用的任何操作都会影响到它们共同的对象 引用一旦被初始化 就不能再重新赋值 需要注意的问题 第33页 继承与派生 1继承与派生的概念2派生类的声明方式3派生类的构成4派生类成员函数的访问属性5派生类的构造函数和析构函数6多继承7虚基类 第34页 理解继承与派生的概念 掌握单继承和多继承的定义方式 掌握继承的几种方式 public继承 private继承和protected继承 以及在不同继承方式下基类成员在派生类中的访问属性的差别 熟悉派生类构造函数的定义和执行顺序 掌握多继承的概念和定义 多继承构造函数的定义与执行顺序 注意多继承的二义性 掌握虚基类的定义和初始化 本章要求 第35页 派生类对基类成员的访问权 基类的私有成员派生类及派生类的使用者都无权访问 对于基类的公有成员的访问权 在定义派生类时 定义的方式不同 权限也不同 第36页 私有派生 由私有派生得到的派生类 对它的基类的公有成员只能是私有继承 基类的所有公有成员都只能成为私有派生类的私有成员 这些私有成员只能被派生类的成员函数访问 而派生类的使用者无权访问 第37页 公有派生 基类中所有的公有成员在派生类中也都是公有的 公有派生在定义派生类时 在基类标识符前加一个public关键词 第38页 保护派生 基类的protected成员只能被其派生类的成员访问 不能被派生类的外部对象访问 第39页 派生类的构造函数 在两种情况下 必须定义派生类的构造函数派生类本身需要构造函数在定义派生类对象时 其相应的基类对象需调用带有参数的构造函数 在定义对象时构造函数的执行顺序是 先祖先 基类 再客人 对象成员 后自己 派生类本身 第40页 在定义对象时构造函数的执行顺序是 先祖先 基类 再客人 对象成员 后自己 派生类本身 第41页 派生类的析构函数 在派生类中是否要定义析构函数与它所属的基类无关 若派生类在退出定义域前有数据需做善后工作 就需定义析构函数 基类的析构函数不会因为派生类没有析构函数而得不到执行 派生类的析构函数的执行顺序正好与构造函数的执行顺序相反 先自己 派生类本身 再客人 对象成员 后祖先 基类 第42页 多继承构造函数的定义 多继承的构造函数的定义与单继承的相似 只是几个基类的构造函数之间用 分隔 派生类名 派生类名 参数表 基类1 参数表1 基类n 参数表n 对象成员1 参数表1 对象成员1 参数表1 第43页 多继承构造函数的执行顺序 先祖先 基类 再客人 成员对象 后自己 派生类 在多个基类之间严格按照派生定义时从左到右的顺序来排列先后 多继承的析构函数的调用顺序 与构造函数的调用顺序正好相反 第44页 虚基类 虚基类的概念虚基类的初始化 第45页 虚基类的概念 当在多条继承路径上有一个公共的基类 在这些路径的汇合处 这个公共的基类就会产生多个实例 或多个副本 若只想保存这个基类的一个实例 可以将这个公共基类说明为虚基类 定义方法 在定义派生类时 在需定义为虚基类的基类描述前加上virtual关键词 第46页 虚基类的初始化 虚基类的初始化与一般构造函数的初始化在语法上是一样的 但构造函数的调用次序不同 派生类构造函数的调用次序 原则有三 1 虚基类的构造函数在非虚基类之前调用2 若同一层次中包含多个虚基类 这些虚基类的构造函数按它们说明的次序调用3 若虚基类由非虚基类派生而来 则仍然先调用基类的构造函数 再调用派生类的构造函数 第47页 1多态性2虚函数3纯虚函数与抽象类 多态性与虚函数 第48页 多态性的实现有两种 早期联编通过重载实现 滞后联编通过虚函数实现 对象指针 指向基类类型的指针可以指向其公有派生类对象 但只能访问从基类继承的成员 虚函数 用于实现滞后联编 在基类中将成员函数声明为virtual特性 就可以在派生类中对该成员函数重新定义 定义原型与基类中的完全相同 是特殊的函数重载 当基类指针指向派生类时 即可访问派生类重新定义的函数 抽象类 是指包含纯虚函数的类 纯虚函数提供了抽象类对派生类的接口 纯虚函数是仅在基类中声明 但必须在派生类中定义不同的实现版本 本章要求 第49页 多态性 多态性指不同对象收到相同的消息时产生不同的动作 C 支持两种多态性 一种是编译时的多态性 另一种是运行时的多态性 编译时的多态性运行时的多态性 第50页 引入派生类后的对象指针 引入派生概念后 任何被说明为指向基类对象的指针都可以指向它的公有派生类可以让指向基类对象的指针指向它的公有派生的对象 若指向私有派生的对象则被禁止 不能将一个声明为指向派生类对象的指针指向其基类的一个对象 声明为指向基类对象的指针 当其指向派生类对象时 只能利用它来直接访问派生类中从基类继承来的成员 不能访问公有派生类中特定的成员 第51页 虚函数的定义及其使用 虚函数的定义在基类中进行 它在基类中需要定义为虚函数的成员函数的声明中冠以关键词virtual 基类中某成员函数声明为虚函数后 此虚函数可以在一个或多个派生类中被重新定义 虚函数重新定义时 不需要virtual声明 重新定义时 函数原形 包括返回类型 函数名 参数个数 参数类型的顺序 必须与基类中的原型完全一致 第52页 虚函数与重载函数的关系 一般的函数重载 函数的返回类型及所带的参量可以不同 仅是函数名相同即可 重载虚函数时 要求函数名 返回类型 参量个数 参量类型和顺序都与基类中原型完全一样 若有不同 按如下处理 1 仅仅返回类型不同 其余均同 作出错处理 2 函数原型不同 仅函数名相同 系统会将它认为是一般的函数重载 将丢失虚特性 第53页 多继承中的虚函数 若派生类由多个基类派生的 对派生类中的同一个成员函数 有时体现为虚函数 有时则只是其某个基类成员的重载函数 虚特性可以传递 注意 指向派生类的指针不能继承 即 基类的指针可以指向它的派生类 但不能指向它的派生类的派生类 第54页 纯虚函数的概念 纯虚函数是一个在基类中说明的虚函数 它在该基类中没有定义 但要求任何派生类

温馨提示

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

评论

0/150

提交评论