




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计 金小峰延边大学工学院计算机科学与技术系2011 第七章程序结构 Programstructure 7 3全局数据 Globaldata 7 4静态数据 Staticdata 7 5作用域与生命期 Scopes Lifetime 7 6名空间 Namespace 7 7预编译 Pre compilation 7 3全局数据 GlobalData 全局数据 使若干个模块在程序范围内共享 读与写 数据 是若干程序文件沟通数据的一种形式 意义 模块的独立性由数据的封闭性来支持 全局数据破坏了数据的封闭性 因而对小程序简单而对规范化程序则不宜采用 生命周期 程序的整个运行周期作用域 全局 多个源码文件 需要声明 Example 全局变量均可访问 全局变量的默认作用域仅限本文件内 extern将全局变量n的作用域拓展到本文件 7 4静态数据 staticdata 7 4 1静态全局数据 模块 函数 文件 静态全局量 a cpp b cpp 静态全局数据 在一个程序文件中共享的数据 Example 7 4 2静态局部数据 作用域同局部变量 在函数中定义 生命周期同全局变量 存放在全局数据区 intn 1 staticinta 2 全局数据区 inta intb intb Example 编译器报警 无报警 但是破坏了变量作用域规则 灵活 bug 7 5作用域与生命期 Scopes Lifetime 7 5 1作用域 全局作用域文件作用域函数作用域 语句标号 使用goto转移 函数原型作用域类作用域局部作用域 Example 第5章习题5讲解 abc txt 向量 平方和容器 排序输出 格式化输出 排序输出 a c d e a c d e 7 6名空间 namespace 名空间 解决名字冲突的方法 所有名字都有空间归属 在一定的空间中 名字是不允许冲突的 引用一个名字时 加上空间归属的前缀 就可以唯一确定该名字所对应的实体 无前缀名字 很多时候 名字都是无前缀的 这是因为事先已经指定了默认名字空间 如果默认名空间在两个以上 则必须注意名字冲突的可能性 7 6 1名空间的概念 名空间机制才是真正全面发挥作用的名称认定和作用域规则 它规定 一个名称必须在使用域中明确声明其使用的 名空间 才能在域中默认地使用该名称 Example std cout Hello world endl usingnamespacestd cout Hello World endl 7 6 1名空间的概念 名空间是其他文件中所有外部名称 非函数局部名称 使用的规范描述 多文件结构 文件层次分离了模块 但是全局名仍有冲突在特定的文件中 可以指定许多名空间 这些名空间分属不同模块的设计 Example excep0701 7 6 2名空间的组织 定义 namespacename 名称声明或定义 一般将名空间的定义放在头文件中 使用方法 usingnamespacename name 函数名 orname 变量名 Example fig0704 7 7预编译 Pre compilation 预编译是C 编译的最初部分在编译之前对程序内容进行最后的取舍处理 使得一些语句参与编译 另一些不参加编译 常用的预编译指令 包含指令 include条件指令 if elif else endif ifdef ifndef定义指令 define undef elseif ifdefined ifnotdefined 7 7 1 include指令 格式 1 include2 include 头文件名 编译器直接到源程序文件路径中搜索 若未找到 则到系统路径中所搜 7 7 2条件编译指令 Example f0707 a1 h文件包含了两次 所以编译错误 怎么解决 条件编译的作用是直接取舍程序语句和协调多个头文件 if elif else endif ifndef define endif ifdef endif Example ifndefDATE defineDATEstructDate intyear month day endif 如果之前没有发现DATE的定义 则开始定义DATE 保证structDate不会重复定义 第8章类 classes 8 1从结构到类 fromstructuretoclass 8 2成员函数 memberfunctions 8 3操作符 operators 8 4再论程序结构 programstructurerestatement 8 5屏蔽类的实现 shieldclassimplementations 8 6静态成员 staticmembers 8 7友元 friends 面向对象方法概论 1 传统软件开发方法中存在的问题 早期 崇尚程序员个人技能 软件复杂性增长 代码难以维护 人们认为软件开发是一项很强的依赖个人技巧和技术能力的艺术性劳动 需要一种新的软件开发方法 后来 出现了两种典型的软件开发方法 即结构化方法和面向对象方法 结构化方法 structuralmethod 结构化方法是结构化分析 结构化设计和结构化编程的总称 强调开发方法的结构合理性以及所开发软件的结构合理性 目的是提供一种有序的机制 通过抽象来理解待开发的系统 试图产生结构良好的软件系统 特点 分析和设计过程注重处理功能 在数据与对数据的操作上结合得不紧密 仍未解决软件危机问题 不容易实现模块的高内聚 低耦合 致使系统缺乏灵活性和可维护性 面向对象的方法 1970年代末 PeterChen提出了实体 关系法 试图使用现实世界中的实体 entity 与实体之间的关系来描述问题空间 并将此空间映射到计算机空间 同时将实体关系映射为类之间的关系 它仍然使用抽象和模块化等概念 它所建立的模型对问题域进行了完整与直接的映射 面向对象的基本思想 面向对象不仅是一些具体的软件开发技术与策略 而且是一整套关于如何看待软件系统与现实世界的关系 用什么观点来研究问题并进行问题求解 以及如何进行软件系统构造的软件方法学 思路 从现实世界中的客观对象 如人 事物 概念等 入手 尽量运用人类的自然思维方式从多方面来构造软件系统 这与传统的结构化方法注重用功能构造系统不同 人们普遍地认为面向对象方法是一种运用对象 object 类 class 继承 inherit 封装 encapsulation 聚合 aggregation 关联 relevance 消息 message 和多态性 polymorphism 等概念和原则来构造系统的软件开发方法 基本思想 客观世界中的事物都是对象 对象间存在着一定的关系 且复杂对象由简单对象构成 具有相同属性和操作的对象属于一个类 对象是类的一个实例 类之间可以有层次结构 即类可以有子类 其中 子类继承父类的全部属性和操作 而且子类有自己的属性和操作 类具有封装性 私有和公有成员 强调充分运用人类在日常逻辑思维中经常采用的思想方法和原则 主要概念 对象 来描述客观事物的一个实体 是构成系统的一个基本单位 由一组属性和对这些属性进行操纵的一组操作构成 属性 描述对象静态特征的一个数据项 数据操作 描述对象动态特征的一个动作序列 函数对象 及其属性和操作都有自己的名字 类 具有相同属性和操作的一组对象的集合 对象的抽象结果用于创建对象 同一个类产生的不同对象其属性值存在差别 继承 指子类 派生类 自动地拥有或隐含地复制其父类的全部属性与操作 这种机制也称为类的泛化 一子多父称为多继承继承可实现软件复用 关联 类之间的静态联系聚合 一个较复杂的对象其他若干个较简单的对象作为其构成部分 把这种对象间的关系称为聚合 面向对象的基本原则 抽象 从事物中舍弃个别的 非本质的特征 而抽取共同的 本质特征的做法 只有与问题域有关的角色才在系统中予以考虑 2 分类 按照某种原则划分事物的类别 有助于对复杂世界的认识 OO中 将具有相同属性和操作的对象划分为一类 3 封装将描述一个事物的属性和操作行为结合在一起 对外形成该事物的一个界面 接口 通过封装体现了事物的独立性 实现了信息隐蔽 信息隐蔽可能带来编程麻烦 执行效率低等缺点 4 消息通信对象之间的操作请求称为消息 对象之间通过消息进行通信 实现了对象之间的动态联系 5 多态性继承形成的类之间的层次关系中 子类继承了父类的属性和操作 另外还拥有自己的属性和操作 多态性是指在子类中定义与父类同名的操作或 和 属性 但这些操作或属性具有不同的含义 如此 相应的对象可以以不同的行为响应同一个消息 面向对象方法的主要优点 从认识论的角度 面向对象的方法改变了人们认识世界的方式面向对象方法使得从问题域到计算机之间的鸿沟变窄易于维护和复用有助于提高软件的质量和生产效率 可提高20 8 1从结构到类 关系密切 但是C中的结构体不允许两者整合 即不能整合为 实体 f0801a 改造一下 数据成员 函数成员 f0801b 还是不太完美 结构体成员在外界可以不受任何限制地访问 能够保护某些成员就好了 然后将这些日期打印出来 f0801c Example f0801 定义类 格式 class类名 访问属性 数据成员1 数据成员2 数据成员N 访问属性 函数成员1声明或定义 函数成员2声明或定义 函数成员N声明或定义 返回值类名 函数成员名i 形参表 函数体 private 私有成员 默认 只能类内访问protected 保护成员 类内及派生类访问public 公有成员 类内外均可访问 成员函数的类体外定义形式 作用同语句标号 如switch语句中的case标号 作用域直到遇见另一个访问属性截至 Example f0802 1 常成员函数 Constmemberfunctions 成员函数如果只对对象进行读 read 操作 则可将该函数定义为常 const 成员函数 好处 该函数对对象的任何写 write 操作均被编译器识别为错误 有效地保护对象成员数据被改写 建议 尽可能使用常成员函数 定义格式 返回值函数名 形参表 const 函数体语句 表明该函数是常成员函数函数的声明和定义均需要const关键字 否则视为函数重载非成员函数不能定义为常函数 如 f0803a 8 2成员函数 Example f0803b 2 重载成员函数 Overloadingmemberfunctions 与普通函数相同 成员函数也可以重载 Example f0804 书中代码有误 字符串常量转换为引用类型错误 8 3操作符 Operators C 把操作符也看作是与函数性质相同的实体 因此 同函数重载一样 操作符也可以重载 Example f0805 号的数学含义不变 仍需要两个操作数 返回与操作数相同类型的结果 调用形式仍沿用 c a b 功能相同 更自然一些 注意书中代码有误 运算符重载注意事项 拒绝创新 不能创建新的操作符 因为编译器对已有运算符有固定的理解 个别重载限制 sizeof typeof 等不允许重载优先级和结合性不变操作数个数不变专门处理对象 只能对自定义类型进行操作符重载忌意义相左 增量操作符 单目运算符前缀和后缀形式 有差别前缀形式 返回结果是左值后缀形式 结果是临时变量 表达式计算完毕 该临时变量将被释放 Example f0806a inta 1 b 1 a 表达式结果是2 a 3 b VC 中编译错误 最右侧的 运算符缺少左值 Example f0806 注意避免VC 6 0的BUG 成员操作符重载 操作符也可以作为成员函数进行重载 Example f0807 作业 将增量操作符的重载用成员函数的方式实现 8 4再论程序结构 1 访问控制 private 只供类内成员以及friend访问 其余均被禁止 包括派生类 如果未指定访问属性 类内成员默认具有private访问属性 通过private实现类内成员对外屏蔽 如果类外需要访问private成员 则需通过公有成员函数或friend进行间接地访问 protected 只供类内成员 friend以及派生类 子类 访问 其余均被禁止 通过protected也可以实现类内成员对外屏蔽 派生类除外 如果类外需要访问protected成员 则需通过公有成员函数或friend进行间接地访问 public 对外对内公开 通常函数成员需要设置成public 除非有些成员函数仅供类内其他函数成员使用 2 类的程序结构 类定义 类体 数据成员 函数成员的声明或定义 类的实现 类体外成员函数的定义 头文件 h 源文件 cpp 应用文件 cpp VC 6 0IDE新增类 Example f0809 8 5屏蔽类的实现 类的封装特性 将类与其他类隔离开来 形成界面 接口 对外隐藏了类定义细节 只保留公有成员与外界通信 使用该类的程序员一般无需关心类的细节 只需要掌握类的功能及其接口函数 有些时候类的提供者只提供类的编译代码 动态连接库或静态连接库文件 8 6静态成员 staticmembers 所有该类的对象共同拥有的同一个内存实体类成员 称为静态成员 与函数内的局部静态变量相似 静态成员只被创建 初始化 一次 存放在全局数据区 生命周期同进程 1 静态数据成员 定义方式 class类名 static类型变量名 类型类名 变量名 初始值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年合同样本:中外合资企业合作协议
- 临床概要外科学试题及答案2025年版
- 临床定考试题库及答案2025年版
- 临床安全合理输血考试题及答案2025年版
- 2025年文化旅游演艺剧目沉浸式体验与运营模式创新
- 2025年特色小镇休闲农业产业创新模式可行性研究报告
- 2025年城市供用电合同范本
- 镭射膜工艺知识培训内容课件
- 镜头知识培训内容摘要
- 2025年3D建模技术在文化遗产保护中的实践
- 更换钢板施工方案
- 家政三方合同协议范本
- 大学生就业心理调适与应对
- 动物医院运营课件
- 《思想道德与法治》(23版):第一章 领悟人生真谛 把握人生方向
- 2025年半月谈材料试题及答案
- DB37-T 5310-2025《城镇排水管渠养护维修服务规范》
- 2024年广东广州中考满分作文《那个教会我说谢谢的人》
- 当前中小学科创教育的现状分析
- 代加工洗涤合同范例
- 如何预防动物伤害
评论
0/150
提交评论