C++ 学习与 CLion 使用:(十五)多文件编程,和C语言一样的多文件编程
上一篇 | 下一篇 |
---|---|
多文件编程 | 待发 |
多文件编程
实际开发中,我们为了缓解main.cpp
文件的压力,我们可以将其中一些函数定义到另外的文件中,main.cpp
调用即可,这也就是多文件编程。
思路如下:
- 新建一个
.h
文件,用来声明函数 - 新建一个
.cpp
文件,用来实现函数 - 在
main
函数所在文件中,#include
.h
文件,然后调用函数去使用
1).h和.cpp文件
.h
文件是用来定义常量和函数声明的,.cpp
文件是用来定义函数的。
他们之间的联系是靠在.cpp
文件中引用.h
头文件实现的。
-
.h
文件格式:#ifndef 工程名大写_文件名大写_H #define 工程名大写_文件名大写_H/* 头文件引用(不需要引用自己这个.h文件) */ using namespace std; // 需要用就加这个/* 变量声明 *//* 函数声明 */#endif
示例(工程名:A1_Learn_Project,文件名:func_return_arr):
#ifndef A1_LEARN_PROJECT_FUNC_RETURN_ARR_H #define A1_LEARN_PROJECT_FUNC_RETURN_ARR_H#include <iostream> using namespace std;int * func1(); //函数返回数组(使用static) int * func2(); //函数返回数组(使用new) int * func3(); //函数返回数组(使用全局变量) pair <int*, int> func4(); // 函数同时返回数组和数组长度(自己问AI的)#endif //A1_LEARN_PROJECT_FUNC_RETURN_ARR_H
-
.cpp
文件格式:/* 头文件引用(要引用自己这个.h文件) */ using namespace std; // 需要用就加这个/* 变量声明 *//* 定义函数 */
示例:
#include <iostream> #include "func_return_arr.h"using namespace std;//函数返回数组(使用static) int * func1() {static int arr1[]={1,2,3};return arr1; }//函数返回数组(使用new) int * func2() {int * arr2 = new int[3]{4,5,6};return arr2; }//函数返回数组(使用全局变量) int arr3[]={7,8,9}; int * func3() {arr3[2]=11;return arr3; }// 函数同时返回数组和数组长度(自己问AI的) pair <int*, int> func4() {static int arr4[] = {10, 12, 13};int length = sizeof(arr4) / sizeof(arr4[0]); // 计算长度return make_pair(arr4, length); }
此时主文件的内容就可以精简为:
#include <iostream>
#include "windows.h"
#include "func_return_arr.h"using namespace std;int main() {SetConsoleOutputCP(CP_UTF8);int * p1 = func1();cout << "使用static:\t";for(int i=0;i<3;i++){cout << p1[i] << " ";}cout << endl;int * p2 = func2();cout << "使用new:\t\t";for(int i=0;i<3;i++){cout << p2[i] << " ";}cout << endl;delete[] p2;int * p3 = func3();cout << "使用全局变量:\t";for(int i=0;i<3;i++){cout << p3[i] << " ";}cout << endl;auto [p4,len] = func4();cout << "同时返回长度:\t";for(int i=0;i<len;i++){cout << p4[i] << " ";}cout << endl;return 0;
}
运行结果为:
使用static: 1 2 3
使用new: 4 5 6
使用全局变量: 7 8 11
同时返回长度: 10 12 13
2)引入头文件与编译
引用头文件的实际作用是:将该头文件指向的文件中的可用代码复制过来。
所以在 .cpp
文件中引入对应的 .h
头文件的目的,就是引入函数对应的声明。
而在 main
文件中引入某个子文件的 .h
头文件,也只是引入了对应的函数声明,此时如果是通过命令行编译 main.cpp
的话,要加上子文件一起编译,然后再执行;如果是直接用 CLion 编译和运行的话,直接在 main.cpp
页面点绿色三角运行按钮即可。