白话C++编程系列之:多个文件篇
liebian365 2025-01-06 13:58 26 浏览 0 评论
我们来简单的复习一个文件的概念:
文件是啥?
文件我们这里特指头文件(.h文件, 也有可能是.hpp文件(声明和实现放在一起), .inl文件)和.cpp文件.
文件是组织代码的一种方式.通常.h文件用来写声明(类的,函数等的), .cpp文件用来写实现(类的,函数等的).
C++中的文件在物理上和我们电脑上、手机上、iPad上看到的文件是一样的。
文件都有文件名字,文件的大小,文件的创建时间等属性。
更多的内容请您点开上面文件的链接详细查看。
今天我们来talk about另外一个和文件相关的概念: 多个文件概念。我们由一个文件到多个文件,还是有区别的.
我们已经知道了文件的概念, 理解多个文件的概念会很easy. 多个文件最主要的区别是组织方式。
类似我们将我们的电脑硬盘分区(盘),如果只分成一个区(盘),也没有什么可好说的。
如果分成多个区,那么我们就想想到底分成几个区,每个区多大,每个区用来做什么?
我们在写代码,特别是越来越大的项目时, 我们要有组织的将多个文件分类处理,或者分功能处理。
1.多文件是想说啥?
多文件 是指对多个文件的分类或者划分。可以按类别划分,或按功能划分, 分别存放在不同的目录中.
如按类别功能划分.将我们自己声明、定义的常量、功能函数、宏定义等等放在一个目录(文件夹)中,
将用来的库比如boost放在libs目录中, 将编译后的release版本, 和测试用的debug版本放在不同的目录中管理。<br />
这就好比我们将win7装在C:中, 我们将安装包放在 D:\中, 将音乐,视频放在E:\中一样. 方便我们管理和处理.
这比我们把所有东西放在一个盘里方便管理和维护好多了,即使我们只有一个盘,通常我们也会分成多个目录来管理.
不能让我们的电脑变成一锅粥...
您想想自己平时是不是这么做的?分类就是其中一个处理多个文件或者平时处理多种信息的一种简单、有效的方式。
来个例子:
//D:\dev\jinLab\p8_file\p9_fileS\p9_fileS.cpp //这里的cpp文件就是: p9_fileS.cpp // p8_file.cpp : 白话C++编程之: 多个文件篇 // /* @Author: Albert 小宁 @Web: http://jinLab.com @WeChatOfficalAccount: 小宁静致远 @Date: 2017-11-12 @KS: https://t.xiaomiquan.com/IeieiEm */ #include <iostream> #include <fstream> #include <string> #include "myDefines/globalDefines.h"
多个文件的例子
上面的例子中我们把我们的全局定义文件 globalDefines.h 文件放在了 myDefines 这个目录中.
#include "myDefines/globalDefines.h"
myDefines/globalDefines.h
我们将配置文件放在了 config.ini 放在了 config 目录中.
config.ini放在config目录下
iostream/string/fstream头文件则放在VS2013的安装目录下的
**c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\ **目录中.
iostream
<br />
<br />
2.多个文件的应用?(举个例子)
其实大家已经看到在上面我们已经举例说明了多个文件的应用, 主要是方便管理和后期维护。这里不在啰嗦了。_
<br />
<br />
3.多个文件的实践?(动手操作)
看了上面的例子, 您也一定觉得很简单,这不就是我们平时放文件时,建立了不同的目录,然后把不同文件放在不同的目录吗?!
对的,C++中组织多个文件,或者多个函数,多个常量的定义时就是采用相同的方式。
如果您经常组织或者整理您的文件,对这个概念将非常清楚,以及为什么这么做您也一定非常清楚!
您真的太棒了!(道理相通,融会贯通!)
我们现在就用上面举的例子,实践一下.
请打开VS2013或者打开cpp.sh http://cpp.sh来(本次cpp.sh也帮不上你的忙了。它不能组织多个文件)写上如下代码:
头文件: D:\dev\jinLab\p9_fileS\p9_fileS\myDefines\globalDefines.h
头文件globalDefines.h
#pragma once //防止多次包含同一个头文件 #include <iostream> #include <string> using namespace std; //找出两个中更大的一个 double GetMax( double dblLeft, double dblRight ) { return dblLeft > dblRight ? dblLeft : dblRight; } void printSth( std::string const & str2print ) { std::cout << str2print << std::endl; } class CMyClass { public: //构造函数 CMyClass(){} //析构函数 ~CMyClass(){} //一个打印函数: 声明 inline void print(); }; //CMyClass::print() 的实现在这个.inl文件中 #include "myClassInl.inl"
.cpp文件: 调用处: D:\dev\jinLab\p9_fileS\p9_fileS\p9_fileS.cpp
cpp文件
//D:\dev\jinLab\p9_fileS\p9_fileS\p9_fileS.cpp //这里的cpp文件就是: p9_fileS.cpp // p9_fileS.cpp : 白话C++编程之: 多个文件篇 // /* @Author: Albert 小宁 @Web: http://jinLab.com @WeChatOfficalAccount: 小宁静致远 @Date: 2017-11-12 @KS: https://t.xiaomiquan.com/IeieiEm */ #include <iostream> #include <fstream> #include <string> #include "myDefines/globalDefines.h" int main( int argc, char * argv[ ] ) { printSth( "今天是周日,天气非常Sunny, 祝您周末愉快!" ); std::string strCfgName = "config/config.ini"; std::fstream ifs( strCfgName,std::ios_base::in ); if ( !ifs.is_open() ) { std::cout << "不能打开文件: " << strCfgName << std::endl; ifs.close(); return -1; } string strLine; while ( getline( ifs, strLine ) ) { std::cout << strLine << std::endl; //printSth( strLine ); } ifs.close(); return 0; }
config.ini文件: D:\dev\jinLab\p9_fileS\p9_fileS\config\config.ini
config.ini文件
url = "http://jinLab.com" google = "https://google.com/ncr"
myClassInl文件: D:\dev\jinLab\p9_fileS\p9_fileS\myDefines\myClassInl.inl
myClassInl.inl文件
void CMyClass::print() { printSth( "I am function print() of class CMyClass!" ); }
我的代码结构目录
代码目录结构
如果使用的是VS2013, 那么我们按F7, 如果没有错误的话, 就会编译生成我们的程序,并且会有下面的输出:
请看,这是程序的输出结果图.
vs2013语句: 程序输出
怎么样?哈哈
恭喜您, 今天您和我一起学习了多个文件这个概念.
多个文件
多文件 是指对多个文件的分类或者划分。可以按类别划分,或按功能划分, 分别存放在不同的目录中.
如按类别功能划分.我们将自己声明、定义的常量、功能函数、宏定义等等放在一个目录(文件夹)中,
将用来的库比如boost放在libs目录中, 将编译后的release版本, 和测试用的debug版本放在不同的目录中管理。
这就好比我们将win7装在C:中, 我们将安装包放在 D:\中, 将音乐,视频放在E:\中一样. 方便我们管理和处理.
多个文件的应用
多个文件的实践
怎么样?- 多个文件的概念很简单吧?它就是我们平时管理文件的一种方式(道理相同,融会贯通)。
您是如何理解它的?能不能举几个例子? 动手写、组织起来吧.
<br />
<br />
白话C++编程系列之:下期预告
白话C++编程系列之七: 入口函数篇
* 1. 入口函数是指什么?
* 2. 入口函数应用例子
* 3. 入口实践例子
<br />
延伸阅读
常量
在编程中值保存不变的量。修饰常量我们常用const关键字.
//常量iPi的值为3.1415926. double const iPi=3.1415926;
《白话C++编程系列之: C++入门与实践大纲》
《白话C++编程系列之一: 本质篇》
《白话C++编程系列之二: 变量篇》
《白话C++编程系列之三: 类型篇》
《白话C++编程系列之四: 语句篇》
《白话C++编程系列之五: C++是啥?》
《白话C++编程系列之六: 表达式(语句之爱恨)》
《白话C++编程系列之七: 函数篇》
《白话C++编程系列之八: 文件篇》
<br />
<br />
<br />
如有侵权,请联系删除!
相关推荐
- 20 个 2020 年软件开发趋势预测
-
企业上云已成不可逆的趋势,全面云计算时代宣告来临,微服务已成软件架构主流,Kubernetes将会变得更酷,2020年还有哪些技术趋势值得观察?一起来看!1.基础设施:条条道路通云端对于云厂商来...
- 目录发布!安徽这些紧缺人才急需
-
《安徽省5G产业急需紧缺人才目录(2020-2025)》(以下简称目录)近日正式发布。本次调研调查了216家代表企业、6家头部企业,获取了426份有效问卷,分析安徽省5G产业紧缺人才需求现状,其中产品...
- AI树莓派——构建树莓派大脑(NCNN环境搭建)
-
前言镜像已经做好了,传到百度网盘中了(请大家及时保存,不定期删除!)...
- 把远程进程通讯grpc引入到Spring boot maven项目中
-
1、参考链接:gRPC官网:https://grpc.io/HTTP2:https://http2.github.io/...
- 面向数据的架构
-
在软件架构中,有一种模式虽鲜为人知的,但值得引起更多的关注。面向数据的架构(Data-OrientedArchitecture)由RajiveJoshi在RTI的2007年白皮书中首次提出,...
- Go语言11岁了,网友:他喵的,终于确定出「泛型」了
-
金磊发自凹非寺量子位报道|公众号QbitAI比Python更快,比Java更简洁,还有C++没有的GC...
- 深度剖析数据库国产化迁移之路
-
作者|吴夏,腾讯云TDSQL高级工程师责编|唐小引头图|CSDN下载自东方IC出品|CSDN(ID:CSDNnews)随着国家有关部门近年来陆续出台相关政策指导文件,推动探索安...
- 团队协作-代码格式化工具clang-format
-
环境:clang-format:10.0.0前言统一的代码规范对于整个团队来说十分重要,通过git/svn在提交前进行统一的ClangFormat格式化,可以有效避免由于人工操作带来的代码格式问题。...
- 嵌入式大杂烩周记 第 9 期:nanopb
-
大家好,我是杂烩君。...
- 开源鸿蒙 OpenHarmony 3.1 Beta 版本发布:系统基础能力增强
-
IT之家1月2日消息,OpenAtom社区已于12月31日发布了OpenHarmony-v3.1-Beta版本。版本概述当前版本在OpenHarmony3.0LTS的基础...
- 零基础物联网开发,踩坑无数,得到这份宝典 | 原力计划
-
作者|Haor.L责编|王晓曼出品|CSDN博客笔者最近参加了校内的一场物联网开发竞赛,从零开始,踩坑无数,感觉很多时候事情都不像预料的一样发展,离开了美好的IDE,太多事情要在板子上一步...
- gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
-
gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发...
- 搜狗开源srpc:自研高性能通用RPC框架
-
今年7月底,搜狗公司开源了内部的工业级C++服务器引擎Workflow,一路收获业内许多认可和关注。9月15日,作为Workflow最重要的生态项目——srpc,一个基于其打造的轻量级RPC框架,也在...
- WebSocket与Protobuf在现代网络通信中的应用实践
-
在现代网络通信中,WebSocket和Protobuf已成为构建高效、跨平台通信系统的关键技术。本文将详细介绍如何使用这两种技术来实现一个稳定且高效的网络通信系统。...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)