往期传送门:
《C++ Primer Plus 第六版 中文版》的研读与学习(九)
《C++ Primer Plus 第六版 中文版》的研读与学习(八)
《C++ Primer Plus 第六版 中文版》的研读与学习(七)
《C++ Primer Plus 第六版 中文版》的研读与学习(六)
《C++ Primer Plus 第六版 中文版》的研读与学习(五)
《C++ Primer Plus 第六版 中文版》的研读与学习(四)
《C++ Primer Plus 第六版 中文版》的研读与学习(三)
《C++ Primer Plus 第六版 中文版》的研读与学习(二)
《C++ Primer Plus 第六版 中文版》的研读与学习(一)
上一期我们谈到了有关函数的内容,今天我们来讲讲用户自定义的函数。
首先,我们来看这样的一个程序:
#include <iostream>
using namespace std;
void simon(int); // 函数原型的声明
int main()
{
simon(3); // 调用函数
cout << "Pick an integer: ";
int count;
cin >> count;
simon(count); //再次调用函数
cout << "Done!" << endl;
return 0;
}
void simon(int n) // 函数的定义
{
cout << "Simon says touch your toes " << n << " times." << endl;
// void类型的函数不需要返回值
}
其中,与我们之前给出的程序不同,我们将名称空间的编译指令using namespace std;
放在了函数体之外,表示本程序中所有的函数都可以直接调用名称空间中的定义。当然,也可以把这条指令分别写在主函数和自定义的函数当中。
同理,我们也可以在函数体之外定义变量,表示程序中任何函数都可以使用这一变量。
接下来,我们看看这个程序的运行结果:
Simon says touch your toes 3 times.
Pick an integer: 99
Simon says touch your toes 99 times.
Done!
在上一期的分享中,我们提到,被调用函数的定义如果在调用的函数之前,则不需要声明函数原型。在本程序中,函数的定义位于主函数之后,因此调用前有必要进行原型声明:
void simon(int); // 函数原型的声明
接着我们看看函数的定义,一般统一为如下的形式:
type functionname(argumentlist)
{
statements;
}
在本程序中,simon
函数类型为void
,即函数没有返回值;形参表(arguementlist)为int n
。
在调用该函数时,由于函数没有返回值,正确的调用方式为:
simon(3);
simon(count);
错误的调用方式为:
result = simon(3);
由于函数没有返回值,因此无法对变量result
进行赋值,编译器将会报错如下:ERROR: void value not ignored as it ought to be
一般地,我们将函数定义时形参表中的参数称为形参,如n
;函数调用时实际运算的参数称为实参,如3
、count
在之前的学习中,我们了解到,C++的主函数也有返回值,那么这样的返回值如何体现呢?主函数的返回值通常直接返回到操作系统。利用UNIX外壳脚本或Windows命令行批处理文件(.bat)都可以设计运行程序,并返回主函数的返回值(也称为退出值),一般地,退出值为0表示运行成功。
我们再来看看用户定义的有返回值的函数:
#include <iostream>
using namespace std;
int stonetolb(int);
int main()
{
int stone;
cout << "Enter the weight in stone: ";
cin >> stone;
int pounds = stonetolb(stone);
cout << stone << " stone = " << pounds <<" pounds." <<endl;
return 0;
}
int stonetolb(int sto)
{
return 14*sto;
}
程序运行结果:
Enter the weight in stone: 15
15 stone = 210 pounds.
在函数stonetolb()
中,包含了函数的所有要素:函数头函数体、函数原型、接收参数、返回值。因此,我们可以将这一函数视为C++的标准函数进行学习。
【番外篇】
我们介绍一下C++中函数与变量的命名规则:
- C++中,只能使用大小写英文字母与下划线_进行命名,不能有其他的字符。
- C++中,区分字母的大小写,也就是分别由大写/小写字母命名的变量(函数)不是同一变量(函数)。
- 变量/函数的命名不能与编译器自带的变量/函数同名。
本期的内容就到此结束。