12.1进入C++注意:大小写敏感cout与COUTCOutCout是互不相同的几个标志符程序2.1myfirst.cpp//myfirst.cpp--displaysamessage#includeiostream//aPREPROCESSORdirectiveintmain()//functionheader{//startoffunctionbodyusingnamespacestd;//makedefinitionsvisiblecoutComeupandC++mesometime.;//messagecoutendl;//startanewlinecoutYouwon'tregretit!endl;//moreoutputreturn0;//terminatemain()}//endoffunctionbody22.1.1main()函数见14页图2.1函数头intmain()返回类型:描述从函数返回给调用它的函数的信息函数名:函数名字形参列表:从调用函数传递给被调用函数的信息通常被启动代码调用,启动代码是由编译器添加到程序中的,程序和操作系统的桥梁,此处描述了程序和操作系统之间的接口main():默认返回int,C++不提倡,有些编译器不支持;intmain(void)void表明不接受任何参数,在C++中,()与(void)等效;voidmain(),不返回值,但有些系统不能工作,要避免使用这种形式。如果main函数末尾没有写return语句,则默认包含了return0;C++必须包含一个main()函数32.1.2C++注释//,为程序员提供说明,编译器忽略提倡使用注释来对程序作说明,程序越复杂,注释的价值越大,不仅有助于他人理解,也有足于自己隔了一段时间之后对程序的理解/**/42.1.3C++预处理器和iostream文件#inlcudeiostream,该编译指令导致预处理器将iostream文件的内容添加到程序中。Iostream文件提供了程序与外界的通信。Io指输入输出。#inlcude编译指令导致iostream文件的内容随源代码发送给编译器,iostream文件的内容将取代程序中的代码行#inlcudeiostream。使用cin输入,使用cout输出,则程序必须包含iostream文件(或iostream.h)52.1.4头文件名Iostream这样的包含文件也叫头文件。C++对老式的C头文件保留扩展名.h,而C++头文件没有扩展名。有些C头文件被转换为C++头文件,去掉.h,在开始加上C,例如math.h变为cmath。头文件命名约定如表2.1,17页。C++头文件可以包含名称空间62.1.5名称空间Usingnamespacestd;叫做using编译指令名称空间是为了使编写江多个厂商已有的代码组合起来的程序更简单而设计的。类,函数和变量是C++的标准组件,都被放置在名称空间中,如std::cout和coutUsingnamespacestd;使得std名称空间中的所有名称都可用,也可通过using声明来做,如usingstd::cout;72.1.6使用cout进行C++输出Cout“comeup”;””表示要打印的消息,是字符串信息;插入操作符,表示该语句把这个字符串发送给cout;cout是什么呢?是一个预定义对象,它知道如何正确显示各种类型的数据。如图2.2,18页的不同含义,编译器通过不同的上下文来确定操作符的含义,就是一个操作符重载的例子。控制符endl:定义于iostream中,位于std,重起一行\n换行符,如果输出字符串,通常使用这种方式。其他情况则使用endl82.1.7C++源代码的格式化分号表示语句的结束,可以每条语句一行,也可以多条语句一行不能把空格、制表符、回车放在元素中间,也不能把回车符放在字符串中间标记和空白:一行代码中不可分割的元素叫做标记。空格、制表符、回车叫做空白,通常要用空白将两个标记分开,但有些字符不需要空白分开,如函数名与()。图2.39C++源代码风格每行一条语句每个函数都有一个开始{和一个结束},各占一行函数中的语句相对{进行缩进与函数名称相关的()周围没有空白102.2C++语句程序2.2carrot.cpp//carrots.cpp--foodprocessingprogram//usesanddisplaysavariable#includeiostreamintmain(){usingnamespacestd;intcarrots;//declareanintegervariablecarrots=25;//assignavaluetothevariablecoutIhave;coutcarrots;//displaythevalueofthevariablecoutcarrots.;coutendl;carrots=carrots-1;//modifythevariablecoutCrunch,crunch.NowIhavecarrotscarrots.endl;return0;}112.2.1声明语句和变量存储信息在计算机中,必须指出信息存放位置和所需的空间。Intcarrots;表示分配一个空间用来存放一个整数,名称carrots标志存储在该内存单元中的值,carrots称为变量,他的值可以被修改。C++中所有变量都必须声明。强制声明,可以帮助提前发现错误。如图2.4此种叫做定义声明。他将导致编译器为变量分配内存空间。还有一类声明叫做引用声明,不引起内存分配。C++声明可以放在使用前的任何地方。122.2.2赋值语句Carrots=25;可以连续使用,a=b=c=d=23;也可以Carrots=Carrots-1;表示计算机使用Carrots-1得到一个新值,然后放到Carrots对应的内存单元132.2.3cout的新花样CoutCarrots;打印非字符串可以和c的printf()进行对比142.3其他C++语句程序2.3getinfo.cpp//getinfo.cpp--inputandoutput#includeiostreamintmain(){usingnamespacestd;intcarrots;coutHowmanycarrotsdoyouhave?endl;cincarrots;//C++inputcoutHerearetwomore.;carrots=carrots+2;//thenextlineconcatenatesoutputcoutNowyouhavecarrotscarrots.endl;return0;}152.3.1使用cinCincarrots;和cout相似,cin也是一个智能对象,将接受到的字符串转换为需要的数据类型162.3.2使用cout进行拼接Cout“”“”carrots“”endl;172.3.3类简介类是用户定义的一种数据类型,定义类需要描述他能够表示什么信息和可对数据执行哪些操作。类与对象就像类型和变量之间的关系。类描述了一种数据类型的全部属性,对象是根据这些描述创建的实体.类可以自定义,也可以来自类库。如ostream和istream,定义与iostream文件中.C++提供了两种发送消息的方法,一种是使用类方法,一种是重定义操作符。Cin.get()cincarrots表示两种调用方式。如图2.5182.4函数函数用于创建c++的模块。函数分为两种:有返回值和没有返回值的。可以使用库函数,也可以自定义。192.4.1使用有返回值的函数程序2.4sqrt.cpp//sqrt.cpp--usethesqrt()function#includeiostream#includecmath//ormath.hintmain(){usingnamespacestd;doublearea;coutEnterthefloorarea,insquarefeet,ofyourhome:;cinarea;doubleside;side=sqrt(area);coutThat'stheequivalentofasquaresidefeettotheside.endl;coutHowfascinating!endl;return0;}202.4.1使用有返回值的函数函数生成一个可赋给变量的值函数调用如图2.6,26页X=sqrt(6.25),()中的值时发送给函数的信息,叫做实参值使用函数前,编译器必须知道函数的参数类型和返回值类型。C++提供这种信息的方式是使用函数原型语句。Doublesqrt(double);函数原型对于函数就像变量声明对于变量。这里在函数头文件里定义了原型。注意区分函数原型和函数定义!创建变量的同时赋值叫做初始化,28页212.4.2函数变体多个参数的函数:函数的多个参数间用逗号分开;不接受任何参数的函数:函数调用必须包括(),即使没有参数;没有返回值void。没有返回值的函数不能放在赋值语句或其他表达式中,举例说明。222.4.3用户定义的函数程序2.5outfunc.cpp//ourfunc.cpp--definingyourownfunction#includeiostreamvoidsimon(int);//functionprototypeforsimon()intmain(){usingnamespacestd;simon(3);//callthesimon()functioncoutPickaninteger:;intcount;cincount;simon(count);//callitagaincoutDone!endl;return0;}voidsimon(intn)//definethesimon()function{usingnamespacestd;coutSimonsaystouchyourtoesntimes.endl;}//voidfunctionsdon'tneedreturnstatements232.4.3用户定义的函数使用方法和库函数相同,必须提供原型,定义和调用。声明一般放在main前,定义放在main函数之后(为了突出main函数,突出程序的结构),注意函数不能嵌套定义,一个函数不能包含另一个函数的定义。定义如图2.8需要知道函数格式和函数图24关键字c++专用,不能用作它用的词汇,例如return是一个关键字,不能将return用作一个变量名。ReturnreturnValue就不是关键字。关键字不用做变量名,函数名等252.4.3用户定义的函数//ourfunc.cpp--definingyourownfunction#includeiostreamvoidsimon(int);//functionprototypeforsimon()intmain(){usingnamespacestd;simon(3);//callthesimon()functioncoutPickaninteger:;intcount;cincount;simon(count);//callitagaincoutDone!endl;return0;}voidsimon(intn)//definethesimon()function{usingnamespacestd;cout