1.4 C++程序的结构
C++兼容C程序设计,它们的程序结构大致相同,常由以下3部分内容构成。
(1)声明部分
声明部分常包括:头文件包含、全局变量或全局常量的声明、函数声明等内容。
C++编译系统(或其他软件提供者)提供了许多具有不同功能的函数,这些函数常被分为声明(即函数头,包括函数返回类型、函数名、形参表)和实现(即实现函数功能的程序代码)两部分,函数声明常以源代码的方式被集中放置在头文件中,实现代码则被编译成二进制代码的形式存放在各种不同的库文件中。在C++程序中,用#include宏将头文件包含到程序中,并按头文件中的函数声明提供函数参数,就能引用该函数的功能,这就是在C++程序的声明部分包含头文件的原因。
为了提高程序的可读性,常将函数定义放在主函数(即main())后面。在C++中,如果函数的调用先于其定义,就必须在声明部分对该函数进行声明,告诉C++编译系统此函数的定义在后面,这样它才能被调用。今后还会发现,声明部分常常包括类的声明。
此外,声明部分还常用来定义本程序要用到的全局变量和符号常量。
(2)主函数部分
同C语言一样,C++程序的主函数也是main,它是程序执行的起点和主体。C++程序从main()函数的第一条语句开始,顺序执行main()函数中的程序代码,执行完main()函数中的全部语句后,程序就结束了。一个函数若想被执行,只有被main()函数直接或间接调用才行。
(3)函数定义部分
函数定义部分用来定义函数的功能,所有在前面只做了声明的函数都必须在此进行定义,即编写相关函数的程序代码。
现在,来看一个简单的C++程序,借此了解C++程序的一般结构。该程序接收从键盘输入的10个整数,并按从大到小排序输出。
【例1-1】 一个简单的排序程序
说明:程序代码前面的行号是为了分析问题而添加的。
① C++源文件类型名。C语言程序文件的类型名是 .C,C++程序文件的类型名是 .cpp。第0行指出本程序的源文件名是Eg1-1.cpp。
② C++注释语句与语句结束符。C++支持C语言的注释语句,即写在/* 和 */之间的内容被视为注释。C++还增加了一个行注释符//,它可以出现在一个语句行的任何位置,其有效范围是从它开始到该行结束。/* 和 */常用来对多行进行注释,即写在/* 和 */标记之间的全部内容都是注释,所以常称它为块注释语句。
同C语句一样,C++程序中也用“;”表示一条语句的结束。
③ C++的数据输入与输出。在C++中常用cin输入数据,用cout输出数据,它们是在iostream.h中定义的。
第1行是一条预编译命令,其作用是将头文件iostream.h的内容包含(即添加)到本程序中。当调用cin和cout命令时,C++就知道在iostream.h中去寻找它们的函数定义了。
第8行的cout表示输出。语句“cout<<"input 10 numbers: \n";”用来把“<<”后面的“input 10 numbers: \n”输出到显示器屏幕上,提示用户输入10个数字。该字符串最后的“\n”与C语言中的含义一样,是个转义符,表示回车换行的意思。最后的分号是语句结束符。
第10行中的cin用于接收从键盘输入的数据。语句“cin>>a[i];”用来把键盘输入的数据存入数组元素a[i]中。第9~10行构成的for循环用于从键盘输入10个整数到数组a中。
第28行的“cout<<a[i]<<" ";”则用于输出数组元素a[i],紧接在数组元素后面又输出了一个空白,用于间隔各数组元素。第27~28行构成一个for循环,用于连续输出a数组的10个元素,各数组元素之间用空白间隔。第29行“cout<<endl;”语句中的endl相当于“\n”,用于在屏幕上输出一个回车换行符。
④ 函数声明与函数定义。第11行调用冒泡法排序函数sort()对a数组排序。
第3行是函数sort()的向前引用声明。本程序在main()函数中调用sort()时(第11行),还没有定义sort(),所以在第3行中进行了声明,void表示该函数不返回任何值。同理理解第4行。
第15~24行是冒泡法排序函数sort()的定义,第26~30行是函数print()的定义。
⑤ 主函数。第6~13行是main()函数。同C程序一样,每个C++程序必须有一个名字为main的主函数,它是程序执行的起点。写在main后面一对{}中的所有程序代码构成了main()的函数体。
运行该程序,当看见屏幕上显示“input 10 numbers:”时,从键盘输入10个整数,输入一个数据后按空格键(也可按Enter键),10个数据输入完成后,程序将会把它们按从大到小顺序排列输出。运行结果如下所示:
说明:上述第2行是从键盘输入的数据,输入完按Enter键,第3行是程序输出的结果。