cpp函数的分文件编写
作用:让代码结构更加清晰
如下步骤:
- 创建后缀名为.h的头文件
- 创建后缀名为.cpp的源文件
- 在头文件中写函数的声明
- 在源文件中写函数的定义,同时引入自定义头文件,将头文件与源文件绑定
- 在使用函数的地方,使用
""
调用.h头文件,在使用的地方直接使用函数
原本的实现方式,函数的 声明、 实现、 使用都写在一个test.cpp文件中
test.cpp:
#include
using namespace std;
// 函数的分文件编写
// 实现两个数字进行交换的函数
// 函数的声明
void swap(int a, int b);
// 函数的定义
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
int main() {
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
当代码量变大的时候,这会让整个代码的结构不够清晰
解决办法:通常将一些 函数的实现和 函数的声明分开到一些文件中,单独地去使用
- 创建swap.h文件
- 创建swap.cpp文件
将刚才test文件中swap函数的声明放入swap.h,swap函数的实现过程放入swap.cpp
swap.h:
#pragma once
void swap(int a, int b);
swap.cpp
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
此时需要将swap.h和swap.cpp文件 关联起来:在函数具体实现的地方引入自定义头文件,让自定义头文件不仅有函数的声明而且还能找到具体的函数实现
#include "swap.h" // 将函数实现cpp文件与自定义头文件关联起来
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
上面的操作就会让函数的实现与自定义头文件绑在一起,以后要使用这个函数的时候,只需要引入这个自定义头文件
此时编译器会报错,提示:
因为 cout
是包含在另外一个头文件中的,可以在这个cpp文件中直接引入这个头文件,也可以在swap.h中将这个头文件引入
swap.h:
#pragma once
#include
using namespace std;
void swap(int a, int b);
此时cpp中不会再有报错
经过上面的操作后,要在test.cpp中使用函数的话,不再像最开始那样一堆代码在一块,可以变得很简洁。
test.cpp:
#include
#include "swap.h"
using namespace std;
int main() {
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
此时swap函数可以在test.cpp文件中使用
总结:
将函数的声明以及函数可能使用的一些头文件,写入一个自定义头文件,引入自定义头文件时,需要使用 ""
写好头文件后,再单独写一个函数的实现cpp,在这个cpp中,头文件只需要引入自定义头文件即可。
此时这个头文件就与这个函数实现cpp绑定在了一起,这个头文件不光有函数的声明,还可以找到这个函数的具体实现
当头文件、函数具体实现cpp都写好了后,我们在别的地方想调用这个函数的时候,只需要引入自定义头文件即可,然后直接调用函数,无需将函数实现,因为编译器可以通过这个自定义头文件自动找到调用的函数的具体实现。
所有的文件最终实现如下:
swap.h:
#pragma once
#include
using namespace std;
void swap(int a, int b);
swap.cpp:
#include "swap.h"
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
}
test.cpp:
#include
#include "swap.h"
using namespace std;
int main() {
int a = 10;
int b = 20;
swap(a, b);
system("pause");
return 0;
}
简而言之,自定义头文件起到 串联的作用,在自定义头文件中是函数的声明以及一些函数的实现必要的头文件。具体函数的实现的位置会将自定义头文件引入,这样自定义头文件就可以找到这个具体的函数实现,以后要使用的时候,不需要再把函数的实现写一遍,引入自定义头文件,就等同于引入了这个函数的实现,可以直接使用这个函数。
Original: https://www.cnblogs.com/seansheep/p/15919535.html
Author: 在青青草原上抓羊
Title: 【C++基础】函数的分文件编写
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/608957/
转载文章受原作者版权保护。转载请注明原作者出处!