C++中头文件(.h)和源文件(.hpp)应该写什么(一)

头文件(.h)

  写类的声明(包括类里面的成员和方法的声明)、函数原型、#define常数等,但一般来说都不写出具体的实现。
  在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下):

#ifndef CIRCLE_H
#define CIRCLE_H
// 你的代码处
#endif

这么做防止重复编译,不这样做就有可能出错。

注:CIRCLE_H 的取名随你的习惯,建议写成这种格式。

源文件(.cpp)

源文件主要写实现头文件中已经声明的那些函数的具体代码。

注:开头必须#include一下实现的头文件,以及要用到的头文件。

当你需要用到自己写的头文件中的类时,只需要 #include 进来就行。
下面举一个最简单的例子来描述一下,求一个圆面积。

第一步,建立一个空工程(以在VS2015环境下为例)。
第二部,在头文件的文件夹里建立一个名为Circle.h的头文件,它的内容如下:

#ifndef CIRCLE_H
#define CIRCLE_H

class Circle
{
private:
	double r; // 半径
public:
	Circle(); // 构造函数
	Circle(double R); // 构造函数
	double Area(); // 求面积函数
};

#endif

注意到开头结尾的预编译语句。在头文件里,并不写出函数的具体实现。

第三步,要给出Circle类的具体实现,因此,在源文件里新建一个Circle.cpp的文件,它的内容如下:

#include "Circle.h"

Circle::Circle()
{
	this->r = 5.0;
}
Circle::Circle(double R)
{
	this->r = R;
}
double Circle::Area()
{
	return 3.14*r*r;
}

注:开头处包含了Circle.h, 事实上,只要此cpp文件用到的文件,都要包含进来!这个文件的名字其实不一定要叫Circle.cpp, 但是非常建议cpp文件与头文件相对应

最后一步,我们建一个main.cpp来测试我们写的Circle类,它的内容如下:

#include<iostream>
#include "Circle.h"
using namespace std;

int main()
{
	Circle c(3);
	cout << "Area=" << c.Area() << endl;
	return 1;
}

注:开头时有 #include “Circle.h” 的声明, 证明我们使用到了我们刚才写的Circle类。
运行一下,输出结果为:

CSDN图标
说明我们写的Circle类确实可以用了。

1、.h叫做头文件,它是不能被编译的。"#include"叫做编译预处理命令,可以简单理解成,在1.cpp中的 #include “1.h” 指令把1.h中的代码在编译前添加到了1.cpp的头部。每个 .cpp 文件会被编译,生成一个 .obj文件,然后所有的 .obj文件链接起来你的可执行程序就算生成了。

发现了没有,你要在 .h文件中严格区分声明语句和定义语句。好的习惯是,头文件中应只处理常量、变量、函数以及类等等的声明,变量的定义和函数的实现等等都应该在源文件 .cpp中进行。

至于 .h.cpp具有同样的主文件名的情况呢,对编译器来说是没有什么意义的,编译不会去匹配二者的主文件名,相反它很傻,只认 #include等语句。但是这样写时一种约定俗成的编程风格,一个类的名字作为其头文件和源文件的主文件,比如 Class1.hClass1.cpp,这个类的声明在Class1.h中,实现在Class1.cpp中,我们人类看起来比较整洁,读起来比较方便,也很有利于模块化和源代码的重用。

为什么这个风格会约定俗称呢?有一句著名的话,叫“程序是为程序员写的”。

2、.h文件和 .cpp文件也就是说,在 .h文件中声明Declare,而在 .cpp文件中定义Define。“声明”向计算机介绍名字,它说,“这个名字是什么意思”。而“定义”为这个名字分配存储空间。对于变量,编译器确定这个变量占多少存储单元,并在内存中产生存放它们的空间。对于函数,编译器产生代码,并为之分配存储空间。函数的存储空间中有一个由使用不带参数表或带地址操作符的函数名产生的指针。定义也可以是声明。如果该编译器还没有看到过名字A,程序员定义int A,则编译器马上为这个名字分配存储地址。声明常常使用extern关键字。如果我们只是声明变量而不是定义它,则要求使用extern。对于函数声明,extern是可选的,不带函数体的函数名连同函数表或返回值,自动地作为一个声明。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ 头文件源文件是程序模块化编程的基本单位,它们分别承担了不同的作用。 头文件C++ 程序用于存放函数、类、宏定义等声明的文件,它的主要作用是为源文件提供需要的函数、类等定义信息。头文件通常使用 `.h` 或 `.hpp` 作为文件后缀名,常见的标准库头文件有 `iostream`、`cstdio`、`cstring` 等。头文件通常包含了以下内容: - 宏定义 - 函数声明 - 类声明和定义 - 变量声明 源文件C++ 程序用于存放实现代码的文件,它的主要作用是实现头文件声明的函数、类等内容。源文件通常使用 `.cpp` 或 `.cc` 作为文件后缀名,常见的源文件有 `main.cpp`、`myclass.cpp` 等。 头文件源文件之间有着密切的关系。头文件包含了函数、类等的声明信息,而源文件则包含了函数、类等的具体实现。头文件源文件之间可以通过 `#include` 指令进行关联。在使用头文件时,需要使用 `#include` 将头文件包含到源文件,从而可以在源文件使用头文件的函数、类等定义信息。 在编 C++头文件源文件时,需要注意以下事项: 1. 头文件要有保护措施 头文件可能被多个源文件引用,如果头文件定义的内容被重复包含,就会导致编译错误。为了避免这种情况,头文件一般需要添加保护措施,例如: ```c++ #ifndef MYHEADER_H #define MYHEADER_H // 头文件内容 #endif ``` 2. 头文件源文件的命名要清晰 头文件源文件的命名应该简洁明了,能够清晰地表达文件的作用和内容。通常情况下,头文件的命名应该以 `.h` 或 `.hpp` 结尾,源文件的命名应该以 `.cpp` 或 `.cc` 结尾。 3. 头文件只包含必要的内容 头文件应该包含必要的内容,例如函数、类、宏定义等声明信息,不应该包含具体的实现代码。具体的实现代码应该放在源文件。 总之,头文件源文件C++ 程序模块化编程的基本单位,头文件提供了声明信息,源文件提供了具体的实现代码,它们之间可以通过 `#include` 指令进行关联。在编头文件源文件时,需要注意头文件的保护措施、文件命名的清晰和头文件只包含必要的内容等问题,以避免出现编译错误和代码混乱的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值