上一篇我们一起学习了《白话C++编程系列之: 函数篇》, 我们知道 了函数的概念,它和数学中的函数还是不一样的。
您印象还深么?您可以点开这个链接再看一次以加深印象。
关于函数您有什么想和我沟通的?有没有什么需要我帮助的?请您在文章的末尾留言. ^_^
现在我们让我们来简单的复习它:
函数是啥?
函数是表达一个独立功能的一段代码.
for exmaple:
//找出两个中更大的一个
double GetMax( double dblLeft, double dblRight)
{
return dblLeft > dblRight ? dblLeft : dblRight;
}
更多的例子请您点开函数的文章查看。
Today, let's talk about 文件的概念.
我们一定对文件很熟悉,从Linux, Unix 或者 Dos, Windows XP 或者更多的操作系统开始,和之前的特别火的Nokia,
当前的智能手机iPhone, Google Android 类手机, 我们操作电脑和手机时时时刻刻都和文件打交道。
我们通过文件记录,修改一些数据。 比如写个excel计算一下GAFATA股票的增长率,
编写一个C++可执行程序,一首mp3, 一个感人的、百看不厌的 Movie《Shawshank Redemption》都是文件的形式保存的。
在编程中文件的概念,特别是在Linux下,文件可以是一个普通txt文件,可以是一个流,一个socket, 一个管道等等.
那么在C++中,写代码时,也就是我们今天要说的文件是指什么呢?
1.文件是啥?
文件我们这里特指头文件(.h文件, 也有可能是.hpp文件(声明和实现放在一起), .inl文件)和.cpp文件.
文件是组织代码的一种方式.通常.h文件用来写声明(类的,函数等的), .cpp文件用来写实现(类的,函数等的).
来个例子:
//.h文件: myFunctions.h
//D:\dev\jinLab\p8_file\p8_file\myFunctions.h
#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;
}
正如上面的例子中写的一样,我们把这2个函数放到了 myFunctions.h这个头文件中.这样我们的.cpp文件也会变得更小。
同时我们改代码的地方也会相对更加集中,维护起来也更省事。
对于大型的项目,我们在项目中,通常是一个类(类我们会在后面的系列文章中详细和大家聊),一个头声明文件,一个.cpp实现文件.
有时,我们也将一些全局的宏或者常量定义在一个头文件中,然后将它#include到.cpp文件中来使用。
像刚才我们的这个myFunctions.h头文件,我们就可以把它#include 到p8_file.cpp中来使用。比如:
//D:\dev\jinLab\p8_file\p8_file\p8_file.cpp
//这里的cpp文件就是: p8_file.cpp
//它#include "myfunctions.h"
// p8_file.cpp : 白话C++编程之: 文件篇
//
/*
@Author: Albert 小宁
@Web: http://jinLab.com
@WeChatOfficalAccount: 小宁静致远
@Date: 2017-11-05
*/
//引入头文件: myFunctions.h
#include "myFunctions.h"
#include <cmath>
int main()
{
printSth( "hello guys! Good weekend!" );
double dblMax = GetMax( 5.0, 3 );
printSth( std::string( "The max is: " ).append( std::to_string( dblMax ) ) );
//或者直接使用标准库的函数
auto aMax = std::fmax( 7.0, 3.3 );
return 0;
}
2.文件的应用?(举个例子)
其实在上面的例子中,我们已经使用了文件的代码组织方式。在越大的项目,这种组织方式越常用.
在这儿,我们举一个另外一个例子.inl文件的。这种方式没有.h和.cpp文件常用,但也是一种非常棒的文件组织代码方式.
直接看例子。这个例子中,我们把CMyClass类中的inline void print()这个内联函数声明放在类本身,但我们将它的实现放在了D:\dev\jinLab\p8_file\p8_file\myClassInl.inl这个文件中.
这么放的好处是整个类看起来更简练,只需要看它的接口声明,而不需要了解它的实现细节。
就好像我们知道饭店做红烧肉,但是我们不需要知道他是如何做这个红烧肉的,又是肉,又是油的,火候如何,烧多久,都不用知道。
但是如何你想知道怎么做的细节,那你可以打开之个.inl文件去查看。
这里是inline void print()的声明(有红烧肉)
class CMyClass
{
public:
//构造函数
CMyClass(){}
//析构函数
~CMyClass(){}
//一个打印函数: 声明
inline void print();
};
这里是print()的实现细节(怎么做红烧肉)
void CMyClass::print()
{
printSth( "I am function print() of class CMyClass!" );
}
这里是把声明和实现结合起来的地方(菜单:有红烧肉这个菜呀)
//CMyClass::print() 的实现在这个.inl文件中
#include "myClassInl.inl"
3.文件的实践?(动手操作)
看了上面的例子, 是不是觉得太简单了,哈哈, 对您也是一样一样的。是不是想动手实践一下.好!一起来!
请打开VS2013或者打开cpp.sh http://cpp.sh来(本次cpp.sh帮不上你的忙了。它不能组织多个文件)写上如下代码:
inl文件: D:\dev\jinLab\p8_file\p8_file\myClassInl.inl
void CMyClass::print()
{
printSth( "I am function print() of class CMyClass!" );
}
头文件: D:\dev\jinLab\p8_file\p8_file\myFunctions.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\p8_file\p8_file\p8_file.cpp
// p8_file.cpp : 白话C++编程之: 文件篇
//
/*
@Author: Albert 小宁
@Web: http://jinLab.com
@WeChatOfficalAccount: 小宁静致远
@Date: 2017-11-05
*/
#include "myFunctions.h"
#include <cmath>
int main()
{
printSth( "hello guys! Good weekend!" );
double dblMax = GetMax( 5.0, 3 );
printSth( std::string( "The max is: " ).append( std::to_string( dblMax ) ) );
//或者直接使用标准库的函数
auto aMax = std::fmax( 7.0, 3.3 );
CMyClass myClass;
myClass.print();
return 0;
}
我的代码结构目录
新建文件
如果使用的是VS2013, 那么我们按F7, 如果没有错误的话, 就会编译生成我们的程序,并且会有下面的输出:
请看,这是程序的输出结果图.
怎么样?哈哈
恭喜您, 今天您和我一起学习了文件这个概念.
文件
文件我们这里特指文件(.h文件, 也有可能是.hpp文件, .inl文件)和.cpp文件.
文件是组织代码的一种方式.通常.h文件用来写声明(类的,函数等的), .cpp文件用来写实现(类的,函数等的).
文件的应用
文件的实践
怎么样?^-^ 文件的概念很简单吧?它是我们组织代码的一种方式。您是如何理解它的?能不能举几个例子? 动手写起来吧.
白话C++编程系列之:下期预告
白话C++编程系列之七: 多个文件篇
* 1.在C++中多个文件和一个文件有什么不同么?
为什么要分出一个多个文件来单独聊?
* 2.多个文件组织的应用例子
* 3.多个文件的实践例子
延伸阅读
inline : 内联关键字.
inline通常用来修饰小的函数,以提高调用速度(编译器将对这个函数的调用,直接变成将这个内联函数代码复制到调用处)
或者为了避免对一个全局函数的重复包含、声明、定义,也可以在函数前面加上inline. 比如:
inline void MyPrint( std::string const & str2print)
{
std::cout << str2print << std::endl;
}
Wana learn English in USA? Click this link:
talk English in USA:在美国学英文
请大家多多动手,让编程也成为您的一种爱好和生产力。
戳右上角 小宁静致远 或扫码关注我, 欢迎、感激传播! ^_^
期待和您多交流、共成长。谢谢!
精灵实验室? http://jinLab.com
留言区就是您的天下,欢迎吐槽、拍砖!
Why NOT let programming a skill of you?
Just click the blue top-right 小宁静致远 or scan the 2D code above to follow me & thanks for sharing me to your friends! ^_^
Hope we can communicate each other & improve ourselves together. Thanks!
JinLab? http://jinLab.com
Any ideas? Please add comments to the article!
鼓励我的创作? Encourage me?
Good!
Thanks a lot!