【C++基础】函数的分文件编写

cpp函数的分文件编写

作用:让代码结构更加清晰

如下步骤:

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义,同时引入自定义头文件,将头文件与源文件绑定
  5. 在使用函数的地方,使用""调用.h头文件,在使用的地方直接使用函数

原本的实现方式,函数的声明实现使用都写在一个test.cpp文件中

test.cpp:

#include <iostream>
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;
}

当代码量变大的时候,这会让整个代码的结构不够清晰

解决办法:通常将一些函数的实现函数的声明分开到一些文件中,单独地去使用

  1. 创建swap.h文件
  2. 创建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 <iostream>
using namespace std;

void swap(int a, int b);

此时cpp中不会再有报错

经过上面的操作后,要在test.cpp中使用函数的话,不再像最开始那样一堆代码在一块,可以变得很简洁。

test.cpp:

#include <iostream>
#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 <iostream>
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 <iostream>
#include "swap.h"
using namespace std;

int main() {
	int a = 10;
	int b = 20;
	swap(a, b);

	system("pause");
	return 0;
}

简而言之,自定义头文件起到串联的作用,在自定义头文件中是函数的声明以及一些函数的实现必要的头文件。具体函数的实现的位置会将自定义头文件引入,这样自定义头文件就可以找到这个具体的函数实现,以后要使用的时候,不需要再把函数的实现写一遍,引入自定义头文件,就等同于引入了这个函数的实现,可以直接使用这个函数。

posted @ 2022-02-21 16:38  SeanSiyang  阅读(708)  评论(0编辑  收藏  举报