第3章 感受(一)——3.3. Hello world 函数版

[回到目录]
白话C++

是该到动手写写代码时候了,我们先写个函数。

请使用Code::Blocks的向导,创建一个控制台应用,命名为HelloWorldFn。

打开main.cpp文件,如果您准备在代码用到汉字,请记得将main.cpp的编码设置为“系统默认”。

在本小节中,我们的代码将不断“演变”,首先来看一眼我们比较熟悉的原始版:


001 #include <iostream>

003 using namespace std;

005 int main()
006 {
007 cout << "Hello world!" << endl;
008 return 0;
009
010 }

3.3.1. 定义函数

首先,我们在003和005之间,插入以下代码片段(不包括行号):


005 void Hello()
006 {
007 cout << "Hello!" << endl;
008 }

现在,我们定义了一个名为Hello的函数,其功能是在屏蔽是输出一句话“Hello!”。这个函数结果类型是void,表示不需要返回值,因此在这个函数里我们也没有找到return。

编译、运行这个程序,我们发现输出结果和经典版没有任何区别,屏幕上仍然是打印出“Hello world!”。

〖小提示〗:函数中代码,仅当被调用时,才起作用。

定义函数,但从不调用它,则该函数中的代码不会被执行。这个函数定义对程序执行也就没有什么影响。当编译器准备优化时,它甚至有本事把那闲置不用的函数,从最终程序里剔除。

3.3.2. 调用函数

接着,我们来调用Hello函数。我们在main函数中调用它。请将main函数改写成如下,改变部分是012行。代码片段如下


010 int main()
011 {
012 Hello();
013 return 0;
014 }

现在编译、运行程序,屏幕上输出将是“Hello!”。这行话不是在main中直接输出了,相反,是通过main函数调用Hello函数,然后在后者输出。

3.3.3. 重复调用

这次,我们在012之后,再插入一行Hello(),即连续两次调用Hello()。代码片段如下:


012 Hello();
013 Hello();

编译、运行……这个例子,说出函数的一个重要功能:函数方便代码复用。也就是,如果你发觉有一段代码经常被用到,那你就可以考虑把这段代码封装成函数。

〖轻松一刻〗:何时需要一个函数?

想象某个阳光明媚的清晨,你走进公司的大楼,心情很好,看到同事小A,你微笑点头:“Hello!”;看到小B,你微笑点头:“Hello!”;看到小C,你微笑点头:“Hello!”……你脖子有些酸了。广告词出现“这时,您需要一个Hello函数”!

不过,也许你会担心,写一份函数,然后多处调用,会不会因为这个函数的代码处处出现,从而造成程序文件变得很大呢?

答案是:通常不会,不过也有例外……

〖小提示〗:函数定义只有一份

“张速通”只有一个肉身,上午A家下水道堵塞找他,下午B家马桶堵塞也找他,并不会造成“张速通”被克隆成两份的结果。

例外:有一种函数称为“inline”函数,为了提高办事效率,它们会在每次调用时,都像孙悟空一样,能化身千万。inline可能造成程序的体积急剧增长,并且有严格的实现条件,所以通常我们用得不多。

3.3.4. 带参函数

再次想象又是一个阳光明媚的清晨,你走进公司的大楼,心情很好,接连看到小A、小B、小C……你“Hello、Hello、Hello”不停地微笑点头。突然,前面出现一个秃顶、发福,表情僵硬的人,你一下子紧张了:“Hello,BOSS……”。

不仅仅是对老板啦,对每个人都只是整齐划一地“Hello”,确实有些不礼貌呢。现在就让我们改改Hello函数,让它带上参数。


005 void Hello(string const name)
006 {
007 cout << "Hello! " << name << "." << endl;
008 }

参数的类型: string const 是C++中的常量string,具体含义暂不说明。

string 是C++标准库定义的一个类,我们需要包含它。请在代码第2行加入:

002 #include <string>

〖现场作业〗:观察“函数参数”有关的编译错误

请编译以上代码,然后观察编译出错信息,如果看不到编译信息,请按下F2可以切换出信息窗口,编译出错信息在信息窗口的“构建记录”页中)。

请(至少在字面上)理解以下编译出错信息:

(图 15 编译出错信息(调用函数时,参数个数不足))

作业中出现编译错误,原因在于我们此时调用Hello函数时,没有传递参数给它。请订正此问题:

012 Hello("Xiao A");
013 Hello("BOSS");

我们分别向小A和老板问个好。请编译、运行该程序。

(图 16 带参数Hello函数例子运行结果)

附上本小节最终代码:


#include <iostream>

using namespace std;

void Hello(string const name)
{
cout << "Hello! " << name << "." << endl;
}

int main()
{
Hello("Xiao A");
Hello("BOSS");
return 0;
}

[回到目录]
白话C++

你可能感兴趣的:(c,优化,String,iostream,编译器,作业)