从顺序表开始,我们要开始建立多文件,因为以后工作中项目基本都是靠团队合作完成的。
那么具体是怎么合作跟建立多文件的
首先我们建立一个(.h)的头文件,名字叫sqlist,也就是sqlist.h
(.h)的头文件是放定义与声明的,(声明:就是只写函数的原型并不实现)
然后我们建立一个(.cpp)的源文件,名字也叫sqlist,也就是sqlist.cpp
与(.h)的头文件同名的(.cpp)的源文件,来放头文件中的函数的实现
接着我们再建立一个(.cpp)的源文件,名字叫text,也就是text.cpp
text.cpp里面放函数的调用,要引用(#include)(用 “ .h ” 不能用 < .h > )存放函数声明的头文件(.h)
最后在调用函数的text.cpp里面运行,结果是正确的30
那么我们来看一下在多文件下这个30是怎么运行出来的
现在这个名为text的源文件(.cpp),是Max这个函数的使用者,即在text文件里面调用Max函数,那么就需要在text里面引用(#include)存放Max函数的定义与声明的头文件(.h),函数的使用者只关心函数的原型是什么样,要不然它不知道函数的返回值是什么,有几个参数,都是什么类型的。而(.h )文件里有这些就够了.text并不关心Max函数是怎么实现的(就相当于你要使用一个工具,你并不需要知道这个工具是怎么生产完成的,你只需要拿着已经被别人做好的工具,去使用它就行了。就像你要吃饭也不需要先去种地),而函数的实现存放在与函数的声明同名字的源文件里面(.cpp)。
以后的工作团队合作的时候,可能你的同事写好了函数的实现,他只给你了一个函数的原型(声明)例如,那么你引用完函数声明的头文件后,直接使用这个函数实现功能就可以了。即不需要知道这个函数功能怎么实现的,只要知道这个函数功能是什么含义,即知道东西怎么用然后去使用它就可以了。
一个团队分工在不同的文件里写代码,你只要写了什么函数,你就把这个函数放到这个点H文件里就行了,你函数的实现放在你的CPP里。 然后这里test就相当于——我在测试。我在text里面使用这个函数,看看在多次不同数据的使用下这个函数有没有什么问题,这个函数能不能满足不同情况下的测试用例。 以后数据结构代码几乎都是这样多文件。
接着我们看一下在头文件的第一行,系统自动给的一句代码是什么意思。这个只要写(.h)文件,这句话就自己跳出来了。
有一道面试题是问你如何预防头文件重复编译。答案就是它。所以#pragma once的意思就是防止头文件被重复引用。在以前老版本的vs时,这句话是需要每次手动打上去的。 因为如果头文件被重复引用了,就会出问题了,直接就编译通不过,报错了。
有人会说,头文件被重复引用我自己写的代码我还能不知道重没重复,你要知道你们是一个团队合作,重没重复,有可能你真的不知道。 为什么呢,就比如说你同时间引用了ABC三个文件。但是这个B文件里面可能又存有一部分A文件的内容,你不知道你直接就引用#include“ A.h ”,#include“ B.h ”,#include “C.h”, 结果B里面又含有了部分A的内容,这不就重复引用了吗?重复引用编译就通不过了,写这句话就告诉你如果被重复引用了,我们怎么样,就自动忽略掉。 比如说你在这里面定义一个什么类型,别人也定义了一个这个类型,同样的被重复定义了2次,肯定编译通不过。 所以要写#pragma once预防头文件被重复引用重复编译