




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章类与对象 3 教学目标 1 理解以类与对象为核心的面向对象程序设计的基本思想 包括封装 继承和多态性的概念及其在面向对象程序中的体现 2 掌握类的定义方法 3 掌握类成员的访问权限控制 4 掌握对象的创建与使用方法 5 了解构造函数与析构函数的定义与使用 6 了解类的继承与派生 运算符重载 以及模板等概念 4 基本内容 7 1面向对象程序设计概述7 2类与对象7 3继承 5 7 1面向对象程序设计概述 两种程序设计思想 面向过程的程序设计 StructureProgramming 以功能为中心 采用函数来描述操作 动词 面向对象程序设计 ObjectOrientedProgramming 以数据为中心 采用对象来描述内部属性和操作方法 名词 6 对象和面向对象 客观世界 实体例 人类静态特征 属性attribute 姓名 性别 年龄 班级 单位 身高等动态特征 行为behavior 吃饭 睡觉 说话 走路 上课 上班 等例 汽车静态特征 属性attribute 品牌 生产厂 型号 颜色等动态特征 行为behavior 行驶 转弯 鸣笛 刹车等 7 面向对象的基本特征 抽象 数据抽象 代码抽象封装 过程和数据封藏起来继承 基类和派生类多态性 虚函数 函数重载 8 OOP的优点 开发时间短 效率高 可靠性高 所开发的程序更强壮重用 共享 可维护性 精简适合于大程序长时间的开发工作 9 7 2类与对象 7 2 1类的定义7 2 2成员函数7 2 3对象的使用7 2 4构造函数与析构函数 10 类 Class 数据类型 类是具有相同属性和相同的方法的对象的集合 它是一种既包含数据又包含函数的抽象数据类型 类的构成数据成员 DataMember 即类的属性 成员函数 MemberFunction 即类的方法 11 7 2 1类的定义 class类名 private 私有成员私有的数据成员和成员函数 protected 保护成员保护的数据成员和成员函数 public 公有成员公有的数据成员和成员函数 12 访问控制权限 私有部分 private 数据成员和成员函数只能在该类的范围内被本类的成员函数访问 体现类的封装性保护部分 protected 与私有成员的性质相似公有部分 public 成员既可以被本类的成员函数访问 也在类外被该类的对象访问 对外界的接口 13 例 定义一个狗类 Dog classDog private charname 20 狗的名字intage 狗的年龄public voidset char n inta 设置数据成员值的函数voiddisplay 输出数据成员值的函数voidspeak 发出狗叫声的函数 14 7 2 2成员函数 成员函数的一般形式 函数类型类名 函数名 参数表 函数体 15 类的作用域 一个类的所有数据成员和成员函数都在该类的作用域内 包括在类声明外部定义的成员函数 类中的每个成员都可以直接访问本类中的其他任何成员 如果在类作用域之外对该类的数据成员和成员函数进行访问 则要受到一定的限制 有时甚至是不允许的 16 例 Dog类成员函数的定义 voidDog set char n inta strcpy name n age a voidDog display cout name t age endl voidDog speak cout Arf Arf endl Dog类较完整的定义classDog private charname 20 intage public voidset char n inta voiddisplay voidspeak voidDog set char n inta strcpy name n age a voidDog display cout name t age endl voidDog speak cout Arf Arf endl 当成员函数比较简单时 可在类定义中直接给出函数体classDog private charname 20 intage public voidset char n inta strcpy name n age a voiddisplay cout name t age endl voidspeak cout Arf Arf endl 19 7 2 3对象的使用 对象是类的实例 先声明后使用说明对象的一般形式 类的实例化 类名对象名表 对类成员的访问 运算符 运算符 20 例7 1 Dog类和对象 intmain charname0 20 intage0 Dogdog1 dog2 cout name0 age0 dog1 set name0 age0 cout 第一条狗 endl dog1 display dog1 speak dog2 set LaiFu 2 cout 第二条狗 endl dog2 display dog2 speak dog1 dog2 同类对象之间可以互相赋值cout 对象赋值后的第一条狗 endl dog1 display dog1 speak return0 21 对象的使用 成员函数可直接访问本类中定义的数据成员 公有和私有 类的作用域内类的对象访问其公有数据成员或成员函数需使用运算符 禁止直接访问一个对象中的私有 保护成员同类对象之间可以整体赋值对象用作函数的参数时属于赋值调用 函数可以返回一个对象 22 7 2 4构造函数与析构函数 构造函数 Constructor 是类的一个特殊成员函数 定义了创建对象的方法 提供了初始化对象的一种简便手段 与构造函数相对应 析构函数 Destructor 用于撤消一个对象 完成释放对象成员所占存储空间的工作 23 构造函数 Constructor 格式 类名 类名 参数表 函数体 注意事项 构造函数必须与类名相同构造函数没有返回值其功能是对对象进行初始化 一般由一系列赋值语句构成由系统自动调用 24 析构函数 Destructor 格式为 类名 类名 注意事项 函数名与类名相同 只是在前边加 符号析构函数不得返回任何值析构函数不得带有任何参数其功能是释放对象成员所占用的存储 一般由一系列的delete组成由系统自动调用 25 例7 2 使用构造函数和析构函数的Dog类 classDog charname 20 intage public Dog 构造函数1 strcpy name XXX age 0 Dog char n inta 构造函数2 strcpy name n age a Dog 析构函数 cout 析构函数被调用 endl voiddisplay cout name t age endl voidspeak cout Arf Arf endl 26 7 3继承 7 3 1派生类的定义7 3 2派生类的继承方式和访问属性7 3 3派生类的构造函数和析构函数 27 生物类的层次关系 28 7 3 1派生类的定义 派生类的定义格式为 class派生类名 继承方式基类名1 继承方式基类名2 继承方式基类名n 派生类增加的成员声明 29 人员类定义classPerson protected charName 10 姓名charSex 性别public voidShowMe 显示数据成员 cout Name t Sex n 雇员类定义classEmployee publicPerson charDept 20 工作部门public voidShowMe 显示数据成员 cout Name t Sex t Dept n 单继承的例子 30 飞机类classPlane charpropeller 螺旋桨public voidflying 飞行方法 船类classBoat charhelm 舵public voidfloating 飘浮方法 水上飞机类classSeaplane publicPlane publicBoat 多继承的例子 31 7 3 2派生类的继承方式和访问属性 私有继承private公有继承public保护继承protected 32 派生类的定义格式 class派生类名 private protected public基类名 private protected public 系统的默认值是私有继承 33 公有继承 public 以公有继承方式创建的派生类对基类各种成员访问权限如下 基类公有成员相当于派生类的公有成员 即派生类可以象访问自身公有成员一样访问从基类继承的公有成员 基类保护成员相当于派生类的保护成员 即派生类可以象访问自身的保护成员一样 访问基类的保护成员 对于基类的私有成员 派生类无法直接访问 34 私有继承 private 派生类对基类各种成员访问权限如下 基类公有成员和保护成员都相当于派生类的私有成员 派生类只能通过自身的函数成员访问它们 对于基类的私有成员 无论派生类内部成员或派生类使用者都无法直接访问 35 保护继承 protected 派生类对基类各种成员访问权限如下 基类的公有成员和保护成员都相当于派生类的保护成员 派生类可以通过自身的成员函数或其子类的成员函数访问它们对于基类的私有成员 无论派生类内部成员或派生类使用者都无法直接访问 36 基类成员在派生类中的访问属性 例7 3 派生类的定义及使用 include includeusingnamespacestd classPerson 人员类定义 charName 10 姓名intAge 年龄public voidSet char name intage 设置数据成员 strcpy Name name Age age voidDisplay cout Name t Age t endl classStudent publicPerson 学生类定义 公有继承 intNumber 学号charClassName 10 班级public voidSetStu char classname intnumber char name intage strcpy ClassName classname Number number Set name age 派生类成员函数直接使用基类的公有成员 voidDisplayStu cout Number t ClassName t Display 派生类成员函数直接使用基类的公有成员 intmain Studentstu1 stu1 SetStu 计算机21 95071007 张三 19 stu1 Display 派生类对象直接使用基类的公有成员stu1 DisplayStu return0 38 7 3 3派生类的构造函数和析构函数 派生类构造函数的一般形式为 派生类名 派生类名 参数总表 基类名1 参数表1 基类名n 参数表n 内嵌对象名1 对象参数表1 内嵌对象名m 对象参数表m 派生类新增加成员的初始化 39 派生类构造函数的执行次序 首先 调用基类构造函数 调用顺序按照它们被继承时声明的基类名顺序执行 其次 调用内嵌对象构造函数 调用次序按各个对象在派生类内声明的顺序 最后 执行派生类构造函数体中的内容 40 析构函数 派生类与基类的析构函数没有什么联系 彼此独立 派生类或基类的析构函数只作各自类对象消亡前的善后工作 派生类析构函数执行过程恰与构造函数执行过程相反 首先执行派生类析构函数然后执行内嵌对象的析构函数最后执行基类析构函数 例7 4 派生类构造函数和析构函数 include includeusingnamespacestd classPerson 人员类定义 charName 10 intAge public Person char name intage 构造函数 strcpy Name name Age age cout Person类的构造函数被调用 endl Person 析构函数 cout Person类的析构函数被调用 endl voidDisplay cout Name t Age t endl classStudent publicPerson 学生类定义 公有继承 intNumber charClassName 10 public Student char classname intnumber char name intage Person name age strcpy ClassName classname Number number cout Student类的构造函数被调用 endl Student cout Student类的析构函数被调用 endl voidDisplayStu cout Number t ClassName t Display intmain Studentstu1 计算机21 95071007 张三 19 stu1 DisplayStu return0 42 扩展阅读 7 4多态7 4 1运算符重载7 4 2虚函数7 5类模板 43 多态性是指某类的对象在接受同样的消息时 所做出的响应不同 接受同样的消息 指调用名称相同的成员函数 所做出的响应不同 指函数实现的功能不同 实现 一种接口 多种方法 的技术 7 4多态 44 多态性的形式 编译时多态性编译器对源程序进行编译时就可以确定所调用的是哪一个函数 编译时多态性通过重载来实现 函数重载运算符重载运行时多态性在程序运行过程中根据具体情况来确定调用的是哪一个函数 虚函数 45 函数重载 一名多用运算符重载 已有运算符赋予多重含义C 系统默认重载 等适用于int double等多种类型位运算 和 用作输入输出运算符 7 4 1运算符重载 46 运算符重载的定义 形式 函数返回值类型类名 operator运算符 参数表 运算符重载实际也是一种函数重载函数operator运算符重载了运算符 例7 5 重载复数类的运算符classComplex doublereal imag public Complex doubler 0 doublei 0 带默认参数值的构造函数 real r imag i doubleReal returnreal 取复数的实部doubleImag returnimag 取复数的虚部Complexoperator Complex 48 7 4 2虚函数 定义 在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数语法 virtual函数返回类型函数名 参数表 函数体 用途 实现多态性 通过指向派生类的基类指针 访问派生类中同名覆盖成员函数 49 例7 6 使用虚函数实现多态性 includeusingnamespacestd classAnimal 基类 动物类 public virtualvoidSpeak cout HowdoesaAnimalspeak endl classCat publicAnimal 派生类 猫类 public virtualvoidSpeak cout miao miao endl classDog publicAnimal 派生类 狗类 public virtualvoidSpeak cout wang wang endl 50 虚函数的使用限制 应通过指针或引用调用虚函数 而不要以对象名调用虚函数说明语句 在派生类中重定义的基类虚函数仍为虚函数 同时可以省略virtual关键字 在派生类重新定义时 必须与基类中的原型完全相同 否则会成为一般的重载 不能定义虚构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民用航空气象人员执照(气象信息系统)考试题库-上(单选、判断题)
- 蒙古北京八中乌兰察布分校2026届高二化学第一学期期末监测模拟试题含答案
- 河北省兴隆县2025年上半年公开招聘城市协管员试题含答案分析
- 河北省肃宁县2025年上半年事业单位公开遴选试题含答案分析
- 河北省乐亭县2025年上半年公开招聘村务工作者试题含答案分析
- 2025年度物流仓储设备采购合同模板集合2
- 2025版通信行业人才培训与咨询服务合同
- 2025年度写字楼公共区域清洁作业合同范本
- 2025店长聘用协议:超市连锁店店长招聘与聘用标准
- 2025年度国际项目外籍工作人员劳动合同书
- 阿特拉斯变频无油螺杆空压机说明书
- 统编本四年级上册语文课堂作业本参考答案
- DBJ50-T-389-2021 高性能混凝土应用技术标准
- 项目经理带班检查记录表(每周一次)
- 智能消防应急照明与疏散指示系统方案
- 人卫九诊断学发热
- 《特困人员集中供养服务协议》
- 说明书hid500系列变频调速器使用说明书s1.1(1)
- 人教版五年级下册期末测试数学试卷【含答案】
- 铁路路基重力式挡土墙施工方案
- T∕CMES 35004-2021 增材制造 激光粉末床熔融316L不锈钢技术要求
评论
0/150
提交评论