在C++中,习惯声明和定义分开,也就是经常出现一个Class对应两个文件,一个.h,一个.cpp。当我们面对多个类设计的时候,文件include可能需要注意。我对此没太多经验,因此吃了点亏。自己总结一点点经验:
1、MyClass.h
此文件只放置与MyClass有关的声明,而不放置任何MyClass中可能用到的类的声明,或者其它.h的引入。
在MyClass.h的首部添加
#pragma once
或者在文件首尾的地方添加
#ifndef _XXXXXX_H_
#define _XXXXXX_H_
....
#endif
用以确保声明只被#include一次。
2.MyClass.cpp
每个Class.cpp的首部include部分,分为2部分。
第一部分是整个类库的.h的include;第二部分是该类自身除了整个类库的.h之外还额外需要的类库的include。
// Public Part
#include "MyClassLibCommon.h"
// Private Part
#include "MyClassBase1.h"
#include "MyClassBase2.h"
#include <fstream>
3.MyClassLibCommon.h
这个文件放置整个类库公共的声明部分,和一些大家都有可能用到的系统库。
#include <iostream>
#include <string>
#include <winsock2.h>
#pragma comment(lib,"wsock32")
using namespace std;
typedef unsigned int dword;
typedef unsigned short word;
typedef unsigned char byte;
4. MyClassLib.h
这个文件是为了外部程序引用方便而设置的。其中引用了库内所有的类。
// 第一部分
#include "MyClassLibCommon.h"
// 第二部分
#include "MyClass.h"
#include "MyClassBase1.h"
#include "MyClass2.h"
5. App.cpp
在这个文件中指需要include一个MyClassLib.h文件即可。整个Project就可以编译了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构