codecamp

C++ 添加新函数

到目前为止我们只使用了C++内置的函数,然而也可以添加新函数。实际上我们已经见过一个函数定义了:main。main这个函数名很特殊,因为它表示程序开始执行的地方,但main函数的语法形式和其它函数定义一样:

void 函数名(参数列表) {
  语句
}

你可以为自己的函数任意定义名称,但不能命名为main或者其它C++关键字。参数列表指定了使用(或称为调用)新函数所需要提供的信息(如果有的话)。

main函数定义中的空括号表示它不携带任何参数。我们首先要写的几个函数也是没有参数的,语法形式如下:

void newLine() {
  cout << endl;
}

此函数名为newLine,只有一个语句,用以输出换行符,其中换行用特殊值endl表示。

在main函数中,我们可以像调用C++内置函数一样调用这个新函数: void main () { cout << "First Line." << endl; newLine (); cout << "Second Line." << endl; }

这段程序输出如下: First line.

Second line.

注意:输出的两行之间有多余的空行。我们要想在两行之间出现更多的空行该怎么做呢?可以重复调用同一个函数:

void main ()
{
    cout << "First Line." << endl;
    newLine ();
    newLine ();
    newLine ();
    cout << "Second Line." << endl;
}

或者我们写一个新函数,命名为threeLine,作用是打印3个空行:

void threeLine ()
{
  newLine (); newLine (); newLine ();
}
void main ()
{
    cout << "First Line." << endl;
    threeLine ();
    cout << "Second Line." << endl;
}

对于这个程序,你应该注意以下几点:

你可以反复调用同一处理过程,事实上这种做法是非常普遍、实用的。

你可以让一个函数调用另一函数。在本例中,main函数调用threeLine,threeLine又调用newLine。同样,这也是普遍、实用的做法。

在threeLine这个函数中,我一行写了三条语句,这符合语法规范(记住,空格和空行通常不改变程序的意义)。然而更好的方式通常是每条语句独占一行,这样程序更易读,我是为了节约篇幅才破坏了这条规则。

为什么我们值得费力气来创建这些新函数?到现在为止可能讲的还不是很清楚。实际上原因有很多,本例只说明了两点:

创建新函数使你有机会给一组语句起个名字。函数将一个复杂的计算过程隐藏在一个简单指令背后,并使用英语单词取代晦涩代码,可以起到简化程序的作用。试问,newLine和cout << endl,哪个更清晰呢?

创建新函数能够去除重复代码,使程序更短小。例如,连续打印九个空行的一种简单做法是调用treeLine三次,那么连续打印27个空行你要怎么做呢?

C++ 函数组合
C++ 定义与使用函数
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }