最近接触了C++里的多文件编译,怕自己遗忘,更是把自己的学习经历分享出来,希望可以帮助到大家。
首先,我们先明确为什么需要多文件编译,下面是一个非常简单的程序
#include<iostream>
int main()
{
using namespace std;
cout <<"hello,world";
return 0;
}
但平心而论,这并不是一个简单的程序
因为cout的逻辑全部都藏在iostream里,而客户端程序(即上文的程序)仅仅只是调用,并不需要关心cout的具体逻辑,这十分的像客户端和服务端之间的关系,客户端只需要关心接口的使用(即cout),而服务端只需维护接口和实现的具体逻辑,不需关心使用,如此以来,维护工作便可以大大精简。
那如何实现呢?
首先,我们需要创建3个文件,分别将其命名为XXX.h,XXX.cpp(放具体逻辑实现),XXX.cpp(放具体使用)
如下示例
stock00.h
#ifndef STOCK00_H_ #define STOCK00_H_ #include<string> class Stock { private: std::string company; long shares; double share_val; double total_val; void set_tot(){total_val = shares * share_val;} public: void acquire(const std::string&co,long n ,double pr); void buy(long sum,double price); void sell(long sum,double price); void update(double price); void show(); }; #include"stock00.cpp" #endif
stock00.cpp#include <iostream> #include "stock00.h" void Stock::acquire(const std::string & co,long n,double pr) { company = co; if (n<0) { std::cout<<company; shares = 0; } else shares = n; share_val = pr; set_tot(); }
use.cpp
#include"stock00.h" int main(){ Stock abc; abc.acquire("NanoSmart",20,12.50); return 0; }
首先,在stock00.h中声明函数,这里声明一个Stock的类
其次,我们把具体逻辑放在了stock00.cpp中,这样的目的同样是方便维护,这里省略了其他函数的实现,落到实地,是需要自己添加函数的实现的。
然后,我们在use.cpp中声明了一个Stock类 abc ,然后使用了abc中的acquire。
有细心的读者可能会发现stock00.h下有一个 #include"stock00.cpp"
那么就不得不谈到什么是include
include其实是一个C的宏命令,它会把目标文件原封不动“搬到”当前文件,所以这也就是为什么include 和其他 include可能会有冲突,因为假设一个目标文件中存在一个函数声明,而把目标文件include 两遍就意味着会把一个函数声明两遍
同时,这也很好解释了为什么include一般会放在文件开头,毕竟函数得先声明才能使用嘛
那这里为什么把include放在最后呢?这也很好理解,毕竟函数得先声明才能定义嘛
那最后我们只需要编译use.cpp就完成这个简单的多文件程序了
感谢观看!如有不足,希望路过大佬批评指正。
学业繁忙,下一期会出类的继承,平时也会介绍一下算法。