第一章 C++基本程序结构
一、 main( )函数
1 带形参的main( )
main不是C++语言的关键词,只是一个函数的名字而已,其特殊性在于它是标准的C++程序的“主函数”。
最基本的原型是:int main( ) 但是,C++标准允许main()有或没有参数列表,可以在main()中使用一个或更多的参数,惯用的原型为:
int main(int argc, char *argv[ ])
第一个参数argc,指明有多少个参数将被传递给main(),真正的参数以字符串数组(即第2个参数argv[])的形式来传递。每一个字符串均有自己意思。或者说,argc代表参数的数量, main()本身是在索引0为的第一参数。 所以, argc总是至少为1 ,它的总数是从argv列阵的元素数目。如果用户在控制台环境中程序名称后键入含参数的指令, 那么随后的参数将传递给argv[1] 。
假如你编译了一个C++程序,程序名称为main.exe,,保存在D盘根目录下,如果键入:
D: main 88 <回车>, 值88将会传递给argv[1]
带形参的main( )非常有用,因为它可以使程序的功能随用户输入的参数而变化,比如Windows命令行程序都是可以带参数的。当用户输入多个参数,参数之间用空格分隔。 课后上机习题: 编写一个带形参的main( ),程序名为testmain.exe,可以统计用户输入的参数个数,并将这些参数联接成一个字串,比如输入: testmain A AB ABC 1 12 123 <回车>,则应输出: 6个参数,AABABC112123
2 main()的返回值
注意main的原型:int main( ),应该返回整型,但我们自已写的main函数体内一般是不写return语句的,这是main函数一个特殊地方:它有一个隐式的return 0, 当程序离开main,return 0会自动返回操作系统,表示“程序成功”。 课后上机习题: 如果你在main( )中写一句return 0,或return 1,或return -1,或return 任意整数,或return 一个非整数,会出现什么状况?试分析其原因。
3 大型程序中的main()
在JAVA中,main()被强制性的包含在一个类里,是一个类的成员函数,而C++没有这种要求----这是C语言的遗留问题。
C语言是结构化编程,要点是自顶向下,也就是说先有一个顶层的总体概念,然后将概念细化。在大型C程序中,main()就是顶层的总体概念,在main()中调用第二层函数,第二层函数再调用第三层函数….,概念一层层细化。结构化编程与面向对象编程不同,面
向对象的设计概念是自底向上的。两者的区别需要很多软件设计经验才能体会到,在此不做过多叙述。
我们平时做的程序很小,往往把所有代码都写到main()中,这是新手习惯,要知道很多几万行代码的大型C程序,main()只有区区十几行或几十行。(JAVA课本中main方法的代码也很少)
二、 头文件include
#include 是预处理器标识符。
Q1:#include
答:<>表示是标准的工程、标准的头文件,查找过程检查预定义的目录,可通过设置搜索路径环境变量或命令行修改这些目录。\\则表明是用户提供的头文件,查找该文件从当前文件所在的目录开始。
Include可以引用C++标准库、C++开发商自行扩充的库、用户自定义的库。 请看《附1:C++标准库简介》
三、名称空间 using namespace
Using和namespace是C++的关键字。
名称空间是为了解决日益增长的C++库,可能带来的重名问题。语法是: using namespace 名称空间名
C++标准库名称空间名是std,所以,引用标准库应这样写: using namespace std。
C++名称空间的概念与JAVA的“包”类似,与C#的名称空间相同。 下面是完整的C++程序引用实例: #include
// include其它库
using namespace std;
// using namespace其它名称空间
int main() { ……}
也有一种不使用using namespace的写法,此时要求引用库文件名带.h,比如#include
#include
#include
using namespace std; 在C++中比较通用
不加.h的是现在C++中规定的标准,而加.h的是c语言的用法,但是在c++中也支持这种用法,主要是为了向下兼容c 的内容。
不加.h和加.h,不仅在形式上有区别,它们不是同一个头文件,比如iostream和iostream.h不是同一个头文件,虽然它们的功能可能完全一样。
还有一个本质上的区别是不加.h的标准C++库的组件放在一个名位std的namespace里面,这是新标准,新头文件。而加.h的标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了,这是老标准的新升级,主要是为了兼容。
四、cin和cout
C++支持C语言的标准I/O printf()和scanf(),但是C++特有的cin和cout更强大,至少它不必小心的匹配I/O数据类型。cin和cout是由
课后习题:
1名称空间namespace有什么作用?C++标准库名称空间名是?
2 using namespace std作用是?如果C++程序中没有这一行,应如何引用头文件? 3 阅读“附1:C++标准库简介”,对于其中看不懂的术语,可上网查找。