原创文章,未经博主允许禁止转载。
C++的类可以进行前向声明。但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针、引用、以及用于函数形参的指针和引用。
而不能定义对象(因为此时编译器只知道这是个类,还不知道这个类的大小有多大),也不能访问类的对象,任何形式的访问都不允许(因为此时根本不知道有些什么成员)。等到类正式定义以后,就可以以各种方式使用该类了。
//前向声明此类 class Video; //此时,只能定义指针和引用。不能定义对象,也不能以任何方式调用对象的成员 void fun1(Video* pv,Video& v1){} //正式定义该类 class Video { public: void show(); }; //现在,这个类可以随便使用了,可以定义对象,访问成员 void fun2(Video* pv,Video& v1,Video v2){ pv->show(); v1.show(); v2.show(); } //类的实现,前面的只能让编译通过,实现类成员以后,连接也可以通过了。 void Video::show()
{
cout<<"zhaojiankang"<<endl;
}
前向声明的作用是:
1.不必在include头文件了,相对会省点编译时间。
2.方便的解决两种类类型互相使用的问题。针对接口编程常常会遇到这种互相使用类型的场景。
原创文章,未经博主允许禁止转载。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~