VC++2011(八).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Visual C++ 程序设计 张 淼 哈尔滨工业大学(威海)计算机学院 第五章 继承和派生 单继承 模块化 多继承 面向对象的分析与设计 5.2 模块化 回顾 模块化是处理大而复杂问题的重要手段,同时也是保证软件质量的有力措施。 模块化能减低程序的复杂度,使得程序容易设计、理解与维护以及能够提高程序的正确性。 在过程式程序设计中一个模块通常由一组相关的全局变量和全局函数的定义构成的。 相关:这些程序实体实现一个逻辑功能。 模块化 在面向对象程序中,可以把一个类当作一个模块,也可以把多个具有继承关系或聚集关系的类作为一个模块。 一个C++模块一般由两个源文件构成:一个是.h文件,一个是.cpp文件。 C++源程序结构 三个组成部分 类的定义及函数原型的声明 类中成员函数的实现 类的使用文件 存储和管理方式 类的定义及函数原型的声明(.h) 包括数据成员和成员函数的声明 类中成员函数的实现(.cpp) 成员函数的实现 类的使用文件 主函数 C++源程序结构 C++源程序结构 C++源程序结构 预处理命令 预处理命令 #ifdef 格式 #ifdef 标识符 语句 #endif 功能 如果已定义了“标识符”,则编译“语句” 预处理命令 预处理命令 #ifndef 格式 #ifndef 标识符 语句 #endif 功能 如果未定义了“标识符”,则编译“语句” 定义一个类时,在定义中加入条件编译指令防止重复包含。 问题 头文件包含了部分类的实现和提示信息 例如,类的私有数据成员出现在头文件中 潜在的向客户暴露了专有信息 代理类( Proxy Classes ) 向客户隐藏包含私有数据成员在内的信息 客户只知道类提供的公有接口 使得客户在使用类的服务时无法访问到类的实现细节 Implemenation.h Interface.h Interface.cpp 第五章 继承和派生 单继承 模块化 多继承 面向对象的分析与设计 二义性问题举例 class B {public: int b; } class B1 : public B {private: int b1; } class B2 : public B {private: int b2; }; class C : public B1,public B2 {public: int f(); private: int d; } 二义性问题举例 下面的访问是二义性的: C c; c.b c.B::b 下面是正确的: c.B1::b c.B2::b 二义性问题举例 派生类C的对象的存储结构示意图: 虚基类 虚基类的引入 用于有共同基类的场合 声明 以virtual修饰说明基类 例:class B1:virtual public B 虚基类 作用 主要用来解决多继承时可能发生的对同一基类继承多次而产生的二义性问题. 为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝 注意: 在第一级继承时就要将共同基类设计为虚基类。 虚基类举例 class B{ public: int b;}; class B1 : virtual public B { private: int b1;}; class B2 : virtual public B { private: int b2;}; class C : public B1, public B2{ private: float d;} 下面的访问是正确的: C cobj; cobj.b; 虚基类的派生类对象存储结构 虚基类构造函数的调用 虚基类的构造函数由最新派生出的类的构造函数调用。 虚基类的构造函数优先非虚基类的构造函数执行。 虚基类的构造函数 如果虚基类定义有非默认形式的构造函数(即带形参的构造函数),并且没有定义默认构造函数,在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化列表中列出对虚基类的初始化。 面向对象分析与设计OOAD 为了得到最佳的解决方案,分析项目的需求(即确定该系统应该做什么)和开发满足这些需求的一份设计(即确定系统应该怎样做)应该遵循一个详细的过程。 如果此过程分析和设计系统是从面向对象的角度来考虑的,那么就称为面向对象分析与设计。 面向对象分析与设计 建立一个大型的软件系统可不是一件简单的事 情,它是一项大工程,人们称它为软件工程 ,它研究如何建立大型软件系统: 可靠性; 成本效益好; 可理解性; 可维护性。 面向对象的软件工程 面向对象分析与设计 面向对象分析的任务是采用面向对象方法,把问题域和系统的认

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档