在C语言中,第一行要写的代码基本上都是
#include<stdio.h>
这其实是一个头文件的声明,意思是在主文件(main.c)中需要调用在这个头文件中声明的函数,如printf,scanf……同样地,在C++中也需要对头文件进行声明,常见的如:
#include<iostream>
#include<string>
#include<iomanip>
等,需要声明的则意味着在下面的函数中需要调用该函数。以上所列举出的一些头文件已经都在标准文件库中写好了。但如果我需要加上一些原来没有在标准文件库中写好的函数又该怎么办呢,因此C/C++文件也提供了自己编写头文件的机制——头文件( (.h)文件)。例如我需要构造一个复数文件,其中的函数可以计算一个复数的模,还可以进行虚数相加。操作如下:
-
打开codeblocks(其他的编译软件也有相应的,这里以codeblocks为例)->点击左上角“File”->“new”->“project”,这时会出现以下提示框,双击“Console application”
-
点击“next”->选择“C++”(如果是C语言则选C)->“next”->填写标题(如C++project),然后选择存储路径(如E:)->“next”->“finish”,这时一个C++文件就构建好了,在source文件夹下会有一个main.cpp文件,这个就是主文件,这时如果需要增添头文件,再点击左上角“File”->“new”->“File…”,这时会出现以下提示框:
-
选择"C/C++header"->选择存储路径(这里的路径要和上面的main.cpp一致,一般点击右边的“…”会出现相同的路径,这时只要填写文件名就OK了,如Complex(文件名一般首字母大写)),接下来会有以下提示框:
-
将“Debug”和“Realease”全部勾选,然后点击finish就完成头文件的创建了。这时在codeblocks中会看到下面的几行代码(蓝色圈内是头文件夹,红色圈内是一个头文件中默认的表示头文件开始和结束的代码,只要将要编写的头文件写入其中即可)
-
接下来就可以在这个头文件中编写一个复数类,其中包括其属性和方法,代码如下:
#ifndef COMPLEX_H_INCLUDED
#define COMPLEX_H_INCLUDED
#include <iostream>
#include <math.h>
using namespace std;
class Complex{ //创建一个复数类
double re;
double im;
public: //将相应的方法设置成public,以供之后在main函数中调用
void setCom(double r, double i){
re = r;
im = i;
}
double getReal(){ //得到实部
return re;
}
double getImag(){ //得到虚部
return im;
}
double amount(){
return sqrt(re * re + im * im);
}
Complex addition(Complex& com){ //定义一个相加的方法,通过引用向其中传递一个复数的地址
double re1, im1;
re1 = re + com.getReal();
im1 = im + com.getImag();
Complex com1;
com1.setCom(re1, im1);
return com1; //将新的复数返回
}
void text(){ //定义输出该复数的方法
cout << "this Complex number is: " << getReal() << " + " << getImag() << "j" << endl; //内部调用自身方法,此处也可直接使用re和im
}
};
#endif // COMPLEX_H_INCLUDED
以上是Complex.h文件
主文件 中只要包含该头文件就可以直接使用该类:
#include <iostream>
#include "Complex.h" //声明包含刚刚建立的复数头文件
#include <iomanip>
using namespace std;
int main()
{
Complex com1, com2, com3; //可直接定义两个复数
com1.setCom(3, 4); //调用public中的放法,将复数的实部和虚部赋值
com2.setCom(2, 3);
com1.text(); //输出该复数
com2.text();
cout << "the amount of this complex number is: " << com1.amount() << endl; //输出复数com1的模
cout << "the amount of this complex number is: " << com2.amount() << endl;
com3 = com1.addition(com2); //定义一个新的复数,其等于调用com1时,以com2为参数计算得到的结果
com3.text(); //输出com3
}
以上是main.cpp文件
输出结果:
这样就完成了一个头文件的构造,在头文件中定义一个类,在main文件中可以使用这个类。这样做的好处:一是可以隐藏一些相应的代码,只需要将过程在main文件中给出,具体的实施方法在头文件中被隐藏,二是增加了可阅读性,避免main函数中出现过多的代码段,不利于调试和检查。
如有错误,欢迎大家批评与指正!