11-大规模C++程序设计.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文档。上传文档
查看更多
11-大规模C++程序设计.ppt

* * * * * * * * * * * * * * * * * * * * 大规模C++程序设计 郭东伟 工程结构 解决方案sln 工程project make文件 源文件 头文件 其他资源文件 大规模C++工程结构 编译依赖 一个编译对象依赖于其他对象 如果被依赖对象发生修改,则依赖对象应该重新编译 .exe - .o -.cpp -.h 解耦 声明(Declare)与定义(Define) 名字(类型、变量、常量、函数等)在使用前必须先声明或定义。 声明:引入名称,使得名称可见 定义:引入实体,可以完整地使用 可以多次(完全)重复声明,但只能定义一次。 定义意味着声明,但声明不一定是定义 在编译阶段需要看到声明,在链接阶段需要看到定义。 一个声明是一个定义,除非 它声明了一个没有详细说明函数体的函数 它包含一个extern定义符且没有初始化 它是一个包含在一个类定义之内的静态类数据成员的声明(它必须在最终程序的某处准确的定义一次) 它(仅仅)是一个类名声明 它是一个typedef声明 声明的结构 [描述符] 基础类型 待声明名字 [初始定义] 描述符 extern, static, mutable, vilatile, virtual auto, register 声明运算符 * 指针;const 常量; 引用;[] 数组;() 函数 声明不能没有类型 一个定义就是一个声明,除非 它定义的是一个静态数据成员 它定义了一个非内联成员函数 即:上面两种情况,必须在此之前有明确的声明 内部连接和外部连接 编译时,每个文件会被处理成一个含有必要信息的源文件,叫编译单元(文件作用域) 即(递归)包含所有头文件所产生的中间文件。 内部连接:对这个定义的访问被局限在当前编译单元,其他编译单元无法访问。(因此也不可能产生同名冲突) 外部连接:可被其他单元访问,因此名称在整个执行文件中必须唯一。 (可能产生同名冲突) 内部连接 static声明描述符(变量缺省) 枚举类型 (完整)类的定义是一个定义,不能在一个编译单元内部重复出现;但可以在不同的编译单元看到同样的定义(和声明) 内联函数 外部连接 extern声明描述符(函数缺省) 因此,无原型的函数是合法的,但不同编译单元中有同名函数是冲突的 非内联成员函数;非内联函数;非静态自由函数(如外部的operator+) 声明与连接方式 声明不引用实际对象在目标文件中 因此,声明可以构建简单的原型,提供外部名字的可见。 函数原型;(全部)类定义;extern全局变量 不能激活外部定义的声明 typedef 简单类声明 例外:静态类数据成员 名字使用的可能错误 在同一编译单元内: 在名字使用之前必须先看到声明 undeclared identifier(CE) 不能出现同一个名字的两次定义 Redefinition(CE) 可以多次声明,但不能不一致 redefinition; different types(CE) 检查该名字的链接类型 内部链接名字的可能错误 内部链接的名字,必须在本编译单元结束之前找到唯一的定义。 used but not defined (CE) 定义指针,不看做是使用,可以只有声明 外部链接名字的可能错误 在本编译单元,可以没有该名字的定义 在链接过程,在所有目标文件中查找该名字的定义点 必须有且只有一个定义点 Undefined Reference Multiple Definition 同一名字,所有声明点必须类型等价 头文件 可能被多个cpp所包含,因此放置带有外部连接的定义肯定是个错误 放置内部连接的定义不会有错误,但通常会有不良的后果 重复的函数定义 使用static 来定义全局变量 const char* cc=“abc”; 头文件中的定义,会污染全局空间 适合放入头文件 类的定义,包括 类成员变量定义 类成员函数声明 类内静态常量(static const)声明 类内静态成员变量的声明 类的内联函数定义 非类成员函数声明 外部连接的变量声明(决不能是定义) 枚举定义 名字声明,非定义,如class 可以但不建议放入头文件 常量定义??? 静态变量声明 静态函数定义(特定情况下有用) 不能放入头文件 非static变量定义 带有extern的变量定义 静态成员变量定义 类的静态成员变量定义(带有初始值) 函数定义 模板 模板在使用之前,不能只有声明。 模板类和模板函数只能全部放入头文件 可以将模板函数实现放入.inl文件,作为.h文件的附加 头文件依赖 头文件递归依赖是个错误 避免头文件重复依赖 可能会产生错误 编译性能下降 必要时可以只声明class 模板类不可以 优化设计 #ifndef _MY_INCLUDE_H

文档评论(0)

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

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档