- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++箴言:最小化文件之间的编译依赖
public:
Person(const std::string
std::string name() const;
std::string birthDate() const;
std::string address() const;
...
private:
std::string theName; // implementation detail
Date theBirthDate; // implementation detail
Address theAddress; // implementation detail
};
在这里,假如不访问 Person 的实现使用到的类,也就是 string,
Date 和 Address 的定义,类 Person 就无法编译。这样的定义一般通过
#include 指令供应,所以在定义 Person 类的文件中,你很可能会找到
类似这样的东西:
#include
#include “date.h “
#include “address.h “
不幸的是,这样就建立了定义 Person 的文件和这些头文件之间的编
译依靠关系。假如这些头文件中的一些发生了变化,或者这些头文件所依
靠的文件发生了变化,包含 Person 类的文件和使用了 Person 的文件一
样必需重新编译,这样的层叠编译依靠关系为工程带来数不清的麻烦。
你或许想知道 C++ 为什么坚持要将一个类的实现细节放在类定义中。
例如,你为什么不能这样定义 Person,单独指定这个类的实现细节呢?
namespace std {
class string; // forward declaration (an incorrec
} // one - see below)
class Date; // forward declaration
class Address; // forward declaration
class Person {
public:
Person(const std::string
std::string name() const;
std::string birthDate() const;
std::string address() const;
...
};
假如这样可行,只有在类的接口发生变化时,Person 的客户才必需
重新编译。
这个办法有两个问题。第一个, string 不是一个类,它是一个
typedef (for basic_string) 。造成的结果就是, string 的前向声明
(forward declaration)是不正确的。正确的前向声明要简单得多,由
于它包括另外的模板。然而,这还不是要紧的,由于你不应当试着手动声
明标准库的部件。作为替代,直接使用适当的 #includes 并让它去做。
标准头文件不太可能成为编译的瓶颈,特殊是在你的构建环境允许你利用
预编译头文件时。假如解析标准头文件真的成为一个问题。你或许需要转
变你的接口设计,避开使用导致不受欢送的 #includes 的标准库部件。
其次个 (而且更重要的)难点是前向声明的每一件东西必需让编译器
在编译期间知道它的对象的大小。考虑:
int main()
int x; // define an int
Person p( params ); // define a Person
...
}
您可能关注的文档
- C++实例(程序界面文字换肤方法).pdf
- C++实例(求单源最短路的).pdf
- C++实例(去除数组中的重复数字).pdf
- C++实例(使用iphlpapi的未公开函数).pdf
- C++实例教学(类的应用-01).pdf
- C++实例教学(类的应用-02).pdf
- C++实例-求N个字符串的最长公共子串.pdf
- C++实例-用C++模拟C#事件机制.pdf
- C++提供了四个显式的数据类型转换函数.pdf
- C++习题与解析(引用-04).pdf
- 初中生物遗传系谱图教育机器人结合编程实践课题报告教学研究课题报告.docx
- 小学五年级下册数学期末试卷及参.pdf
- 国家管网集团2026届高校毕业生招聘考试备考题库(浓缩500题)含答案详解(能力提升).docx
- 高中生基于地理遥感数据研究城市热岛效应与城市热环境规划课题报告教学研究课题报告.docx
- 小学道德与法治教学中同伴交往能力的培养策略研究课题报告教学研究课题报告.docx
- 人工智能教育实践共同体构建与教师教学能力培养模式研究教学研究课题报告.docx
- 高中戏剧教学中即兴表演的实践与教学效果分析课题报告教学研究课题报告.docx
- AI数学建模工具在高中机器人手术模拟训练中的实际应用课题报告教学研究课题报告.docx
- 移动学习环境下高中化学实验教学资源的开发与利用课题报告教学研究课题报告.docx
- 开源软件助力中小学数字教材开发与教学效果提升研究教学研究课题报告.docx
最近下载
- 黄磷尾气在循环流化床锅炉中的掺烧使用介绍.PDF VIP
- 静脉输液安全隐患及防范措施.pptx VIP
- 碗扣钢管楼板模板支架计算书97027.doc VIP
- Boss Roland逻兰ME-90B 贝斯综合效果器[Simplified Chinese] ME-90B Reference Manual 说明书用户手册.pdf
- 玩转手机银行APP.doc VIP
- 征信报告模板详细版带水印可编辑2025年9月新版.pdf VIP
- 征信电子版PDF个人信用报告简版2024年12月最新版可编辑带水印模板.pdf VIP
- 征信详细版纸质个人信用报告2024年12月版可编辑带水印.pptx VIP
- 羽毛球单双打简易规则和图解.doc VIP
- 第1讲职业生涯规划概论.ppt VIP
原创力文档


文档评论(0)