瑞问:“是不是有不那么烧脑的做法呢?”
好的,我们换一种写法。
瑞说:“这看起来舒服多了,我也能算出3。”
这是C++的做法,C++是对C语言的改良,所以C++提供了更加强大的功能,对程序员也更友好。
瑞问:“既然C++这么友好,那为什么不直接用C++?”
C++语言是在C语言的基础上扩展出来的语言,所以C语言本身就是C++语言的一部分,C语言一切的功能C++都支持。学习C语言也就是学习C++语言。
我解释一下新的程序吧,第一行变成了#include <iostream>。
瑞说:“<>里面的名字变了。”
是的,我们要用另一位编程前辈给我们的程序了。
注意: 因为#include总是要写在程序开始的地方,所以大家也将其称为导入头文件。
瑞说:“第二行‘using namespace std;’看上去很复杂。”
这句话叫作定义命名空间,这是C++增加的。C语言里没有这个语句。我们通过之前的经验知道,在这里使用的printf,是别人提供的一组名字叫作printf的程序。时间长了,越来越多的人会分享自己的程序,那我们就会有越来越多的不一样名字的程序可调用。
瑞问:“名字起多了是否会重名呢?”
是的,到了C++的时代,这个问题就很严重了。为了解决这个问题,加入了一个叫作命名空间的概念。举个例子,在中国会有很多地名,你的学校旁边有一座山叫“牛头山”,可是我知道,在其他很多地方,也有不少牛头山,但是这没有问题,发生名字冲突的时候,我们会说这是“云南省昆明市牛头山”,“云南省昆明市”就是命名空间。今天我所要使用的这个程序的名字,会放在std的命名空间里,这样我就可以确保这个名字是明确且唯一的。
瑞说:“‘using namespace std;’就是‘云南省昆明市’。”
输出的语句是“cout<<1+2;”,cout是调用别人程序的名字。这个名字起得不错:c是控制台;out是输出;<<是一个天才的设计,非常形象地表示把后边的内容送到控制台输出。事实上,我知道这个设计在当时费了不少周折。
瑞问:“用这种方式实现输出1+2=3的效果该如何写?”
瑞说:“还能不断地<<!”
字符串和数字还是不能混在一起的,但是这么做看上去舒服多了。额外地,我加上了endl,这是换一行的功能,和printf里的\n效果一样。
瑞说:“C++语言和C语言相比,变化还真是不小。”
思考: 体会了C语言和C++语言实现相同功能的不同做法,你会发现,编程技术越来越人性化了。在计算机发展的早期,编程技术只能关心如何更好地满足计算机的需求。随着计算机越来越强大,编程语言的设计者在前人成果的基础上思考得也越来越多,编程技术也越来越靠近人的思维。不过,事情总是有利有弊,编程技术人性化的同时对高手来说乐趣会变更少,所以非常多的程序员还是会迷恋C语言这样的技术。