教程 - 软件 - 文章 - 论坛

::白话C++课程::

第一感受——include

这是我们第1小节写的Hello World程序代码:

//---------------------------------------------------------------------------

#pragma hdrstop

#include <iostream>
#include <cstdlib>

//---------------------------------------------------------------------------

#pragma argsused


int main(int argc, char* argv[])
{

    //输出对世界的问候:
    std::cout << "Hello world!" << std::endl;

    std::system("pause");  //让程序暂停

    return
0;
}

//---------------------------------------------------------------------------

(第1小节的代码:hello\ch1)

第2小节:include

 

#include <iostream>

#include <cstdlib>

这两行代码,用于让本源文件可以包含“iostream”和“cstdlib”两个头文件。为什么源文件需要包含头文件呢?这得先从C++里“头文件”和“源文件”的区别说起。

头文件:用于“声明”一些功能,数据。

源文件:用于真正“实现”功能,定义数据。

对于C++,头文件扩展名通常为: .h、.hpp、.hxx。其中C++标准库的头文件,则干脆没有扩展名,如何上述代码中的 iostream 和 cstdlib。对于C++,源文件的扩展名通常为cpp。

怎么理解“声明”和“实现”二者呢?简单的说,这有点像“名片”和“真人”的关系。

“名片”,表明有一个人,但它并不就是真的那个人(真的人有血有肉,而它只是一张纸)。

“名片”,它表示你通过它,可以找到某个人,但这只是“可能”,因为如果名片上的内容有误,或者那个人挂掉了,那么就找不到指定的那个人。

“名片”,它往往指出它所代表那个人的职务或功能。比如是一个程序员,或者是一个程序员的老板。如果是前者,通过名称,你应该可以找到一个程序员, 并由他而获得“写程序”的功能;如果是后者,那你可以获得对前者“指手划脚”的功能。

“名片”,有些人需要,有些人不需要。事实上,多数程序员是不需要名片的,而老板,则很需要。

对于程序来说,“声明”表示存在某个“数据”,“数据”可以是一个变量,一个函数,或者一个类。这些我们后面讲。这个数据往往要被其它代码所使用 ,正确情况下,这些数据必须存在。

和“名片”不同地方是:名片往往着写着一个人的实际地址;而代码中的“声明”,则只表示“应该有这样一个数据”,并不负责标出这个数据到底定义在哪里,那么,谁负责找到这个数据呢?这就是链接器做的事,如果链接无法找到这个数据,就会报错。

假设我具备疏通下水道的功能,那么我就可以印上100张名片,上面写着“专业疏通下水道”,然后上街趁城管不在时,使劲分发给路人。“名片”取到了向他人声明我具备某某能力的作用;而“真人”,也就是我的肉身,(通过学习或锻炼)实现了我所声明的能力。

如果没有名片,那么我站在大街上,也不过“泯然众人矣”,又有哪位知道我身怀疏通下水道的绝技呢?我的本事只够捣鼓自家马桶;相反,有了名片,那些有“潜在”需求的客户,就可以在必要的时候,联系我过去帮忙(生活自足可无忧矣!)。

因此,源文件“包含”了一些“头文件”,就相当于一个人索要了他人名片,以备以后“调而用之”。

事实上,“头文件”是一个“名片集”,因为在头文件里,往往并不仅仅声明一个“数据”,而是同时声明了一组数据(这些数据一般互有关联)。就像收集了某个公司 所有的名片。这样做,对于要访问这个公司的客户,有它的方便之处,是不是?

我们写程序,不可能所有功能都自己实现。C++已经积累了大量的功能代码;因此,我们总是需要在自己写的代码里,去“包含”种种头文件。以本工程为例,虽然这是一个很简单的程序,但也至少用到“向控制台输出”和“暂停”这两个功能;二者的头文件正是前述的“iostream”和“cstdlib”。

iostream -- i/input/输入;o/output/输出。表示输入输出流。

cstdlib -- c 表示它来自C++的前身C语言的头文件,std 表示“标准/standard”。lib 则是“库”的英文单词缩写。

一句话,如何拿到你要的代码的名片呢?写上“#include”,然后空格,再写上代码的头文件名。

#include 代码文件名称

有同学会问,我怎么知道要用到头文件是什么名称呢?例如:你想用程序删除你电脑上的某个文件,那“删除指定文件”这一功能所在的头文件是哪个呢?

我们今天只是“第一感受”。以后专门讲到头文件时,会对这个问题做出回答。

“包含”,是对“include”的字面直译。在某些语言里,该术语或称为“引用”或“导入”。“引用”在意义上更贴切,但C++语言里,“引用”另有其意。 至于“导入”(Java采用这一词),和“包含”类似,有些歧义。且记:事实上,那些代码只是被“借用”了,并没真正被“导入”到当前源文件里。我的意思是:假设已经有源文件A include 头文件B,那么,此时又有源文件C include 头文件B,则该行为并不会引起程序文件变大。


作业:

  1. 在代码前面部分增加新的include语句:

#include <string>

然后,在代码中原来输出“Hello World!” 和 “system("pause")”两行间加入新行:

std::string msg = "张三";  //可以换成您的尊姓大名

msg = "你好," + msg + " !";

std::cout << msg << std::endl;

编译并执行程序,看看结果。

版权所有 谢绝复制。作者:南郁(nanyu) www.d2school.com