减少文件之间的依赖问题
头文件的相关作用
头文件是存放一系列函数声明的地方
头文件可以被其他文件引用,从而避免了一大堆的重复的声明
源文件
源文件指cpp文件 m文件等写了大量代码大量实现的地方
预处理
在预处理的过程中,主要进行了文本的替换操作,宏定义的展开等等。
比如inlcude以及import的文件内容,在预处理的阶段就会被相当于复制粘贴到写了include的地方
编译
编译的过程,主要是对源文件进行编译,操作一般是进行词法分析与语法分析等等内容,确定了空间的大小等等(比如能按照类的大小去排布内存等,等到链接的时候进行地址回填)最终生成了汇编代码
前向声明
什么是前向声明?即在类的完整定义没有的时候进行声明,告诉编译器“你只需要知道这个类存在即可,而不需要关注她的具体的实现大小等内容“
形式如下:
@class a class b { private: a* test; }
在这个中使用了类a的前向声明,但是由于不知道其具体的东西,所以只能使用关于a的指针或者是引用操作(因为指针大小知道,编译器能够计算出对应的大小)
前向引用的作用
1.消除循环引用
b.h中引用a.h,a.h中引用b.h,造成了这两个文件相互引用,形成了循环依赖,会导致出现unknown type的错误
解决:在b中对a使用前向引用,在b.cpp中引用头文件即可
2.减少编译的压力
由于引用了头文件,导致一个文件更改的话,引用了其的文件都需要进行全部的编译,但是有时候无脑include但是,实际上,没有用到或者只是用到了指针定义,就不需要对其进行include,改成前向引用即可。
PImpl技术
指针配合前向引用,将类的一些成员和之前的类分开,就达到了解除依赖的效果
例如
`
//*****test.h
//!PImpl前向声明
class CTestImp;
class CTest
{
public:
CTest();
~CTest();
void Public_Method();
private:
//! PImpl指针
CTestImp *pimpl_;
};
//*****test.cpp
class CTestImp
{
public:
void Private_Method() {}
int private_var_;
};
CTest::CTest() : pimpl_( new CTestImp() )
{
}
CTest::~CTest()
{
if(pimpl_)
{
delete pimpl_;
}
}
void CTest::Public_Method()
{
pimpl_->Private_Method();
pimpl_->private_var_ = 0;
}
`
https://www.zhihu.com/question/52832178
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!