c++-文件分离
2019-12-23 16:01:47来源:博客园 阅读 ()
c++-文件分离
实现文件分离
1.头文件中不要使用using namespace,由于c++编译的特性,由于初学还没深入了解,不做具体编译的解释
2.由于没有了命名空间,所以string定义要写成std::string
3.main.cpp中引入staff.cpp,staff.cpp中引入staff.h
main.cpp
#include <iostream>
#include <string>
#include <fstream>
#include "staff.cpp"
staff.cpp
#include <iostream>
#include <string>
#include <fstream>
#include "staff.h"
using namespace std;
这样就可以通过编译了
那么为什么呢?经过网上查阅资料找到了原因:
但是下面的解释我感觉还是有不对,下面的内容仅供参考,带我对c++有了更深的了解之后,再写一篇完整的博客来解释文件分离的实现,迫于课程设计的安排,不得不囫囵吞枣一下,嘻嘻嘻
还有一点就是在解决这,个问题的时候,又看到有说函数模板解决的,我现在大致明白了函数模板是干什么的,但在实现文件分离这一块还不是很明白,以后再补上,嘿嘿嘿!!~··
接下来介绍一篇我发现的一篇博客,底部有转载处:
- namespace和class
命名空间和类,非常相似,比如:
std::cout 和A::f(), 都用到了作用域符,都可以防止重名函数,可以更好的支持多人编程。
但是有几个不同:
namespace 可以写在多个不同的文件中,而class只能在一个文件中。
如果想使用A类中的函数如A::f(), 需要建立一个类的实例(静态函数等除外),而namespace则相当于本身就是一个建立好的实例,可以直接调用函数。
除此之外,可以将命名空间看做特殊的类。
需要注意的是千万不要在h文件中使用using namespace,否则整个文件都会带上。
- .h文件和.cpp文件
首先要知道的是两种文件的最大区别:
编译器将所有.cpp文件编译为.obj文件再串联起来。如果.cpp中有#include X.h文件,那么第一步预处理会把X.h代码粘贴到.cpp中代替#include语句。
基于这个特性,显然,如果我们include 同一工程下的.cpp文件,那么会将该.cpp文件重复两次(一次是本身的编译,一次是include的复制)。因此,.cpp文件不适合进行include。
而我们往往需要在一个.cpp文件中include很多其他文件的代码,那么这时候就需要.h文件。
一个比喻就是.h是目录,.cpp是内容。
这里需要再说一下编译的过程,关键是声明和定义的区分。
如果是声明的话,比如声明了一个函数,在汇编语言中就会通过call语句等在全局中寻找这个函数,只需要这个函数在别的.cpp文件中有定义就可以了,而不需要当时就定义。
对变量也是这样,当想使用一个别处定义的变量时,首先要声明,使得该名字为程序所知。
如果不加“extern”的声明,如
int j;
则会自动将j定义为j=0,自动初始化。那么这时就会出现重复定义等错误问题。
因此,应该使用
extern int j;
这将告知程序 有这样一个j存在,就可以使用了。而j的定义在其他.cpp中,整体编译完后就可以获得j的定义了。
函数则会自动默认为是extern的效果。
因此,在.h中进行声明,在.cpp中进行定义。可以避免重复的编译,也更便于管理。
注意,不能在函数体内初始化一个extern变量,因为函数体的作用域仅在函数内。
感谢这篇博客给的我启发
原文链接:https://www.cnblogs.com/ygjzs/p/12089039.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C++中set的使用
下一篇:TCP三次握手与四次挥手
- QT5 解析JSON文件 2020-06-09
- QTableView与Excel之间的文件打开与保存 2020-05-26
- C++ 文件输入输出 2020-03-27
- [C++]HelloWorld背后的故事!总结一下在我们运行exe可执行文 2020-03-27
- 标准输入重定向到文件后,如何连续读入,如何判断标准输入流 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash