1换行符C++中cout”halloword!\n”中\n同样可以起到换行的作用2关键字C++中预定义了63个关键字,参见表2-2。另外,还定义了11个运算符关键字,它们是:and、and_eq、bitand、bitor、compl、not、not_eq、or、or_eq、xor?、xor_eq另外,有些标识符虽然不是关键字,但C++语言总是以固定的形式用于专门的地方,也不能把它们当作一般标识符使用,以免造成混乱。这样的标识符有include、define等asmdefaultfloatoperatorstatic_castunionautodeleteforprivatestructunsignedbooldofriendprotectedswitchusingbreakdoublegotopublictemplatevirtualcasedynamic_castifregisterthisvoidcatchelseinlinereinterpret_castthrowvolatilecharenumintreturntruewchar_tclassexplicitlongshorttrywhileconstexportmutablesignedtypedef.const_castexternnamespacesizeoftypeid..Continuefalsenewstatictypename..3.unsigned和signedunsigned和signed只用于修饰char和int,且signed修饰词可以省略。当用unsigned修饰词时,后面的类型说明符可以省略。例如:signedintn;//与intn;等价signedcharch;//与charch;等价unsignedintn;//与unsignedn;等价unsignedcharch;//与unsignedch;等价short只用于修饰int,且用short修饰时,int可以省略,即:shortintn;//与shortn;等价long只能修饰int和double。当用long修饰int时,int可以省略,即:longintn;//与longn;等价int和unsignedint类型占用一个机器一个字(word)的字节。在16位操作系统上,它们占用2个字节;在32位操作系统上,它们占用4个字节。4.变量类型在计算时的自动转换两个float型数参加运算,虽然它们类型相同,但仍要先转换成double型再进行运算,结果亦为double型;char型与short型会先转换成int型再进行运算5.转义字符'\n'//换行'\r'//回车'\t'//水平tab'\v'//垂直tab'\b'//退格'\f'//进纸'\''//单引号(')'\'//双引号()'\\'//反斜杠(\)6.定义符号常量const类型名字=值;例2-7:constdoublePI=3.1415927;//圆周率πconstlongnumber=49L;constcharTAB='\t';constcharQUERY='?';constdoubleSOMENUM=1.235E75;7.字符串的输入(1)scanf我们输入字符串hellothere,但读到空格时,scanf()就停止了,仅hello存入了字符串。(2)Gets如果需要读取带空格的字符串,可以使用函数gets来做这件事情。gets的作用是读取一行字符到一个字符串变量中。它会读取空格,直到遇到'\n'或'\0'时才返回。8条件运算符条件运算符是C++中唯一的三目运算符,也称为三元运算符,它有三个操作数:操作数1(表达式)?操作数2:操作数39逗号运算符逗号运算符带两个操作数,返回值是右操作数。逗号表达式的一般形式是:表达式1,表达式2,……,表达式n,它的值是取表达式n的值。例1:intm,n,min;intmCount=0,nCount=0;min=(mn?mCount++,m:nCount++,n);当m小于n时,计算mCount++,m存储在min中。否则,计算nCount++,n存储在min中。例2:a=10,11,12结果是a为12。10.特殊运算符表类型运算符例子全局变量或全局函数::(全局)::GetSystemDirectory类中的域变量或函数::(类域)CWnd::FromHandle括号及函数调用()(a+b)*(a-b)指针指向的结构或类种的域变量-(CWnd*wnd)-FromHandle结构或类中的域变量.(CWndwnd).FromHandle数组下标运算符[]nYearsMonthsDays[10][12][366]内存分配运算符newnewCWnd内存释放运算符deletedelete(CWnd*wnd)11.位运算符(1)、逻辑位运算符(1)单目逻辑位运算符:~(按位求反)作用是将各个二进制位由1变0,由0变1。(2)双目逻辑运算符:&(按位与),|(按位或),^(按位异或)其中优先级&高于^,而^高于|。&:两个都为1时结果为1。|:两个其中有一个为1则结果为1。^:两个不同则结果为1,否则为0。(2)、移位运算符移位运算符有两个,(左移)、(右移)。两个都是双目运算符。例.指出下面表达式的功能。(p&0377)|(k&0xff)8答:将整数p的低字节作为作为结果的低字节,k的低字节作为结果的高字节拼成一个新的整数。扩展:+=加赋值-=减赋值*=乘赋值/=除赋值%=求余赋值&=按位与赋值|=按位或赋值^=按位异或赋值=左移位赋值=右移位赋值需要注意的是:x*=y+8等价于x=x*(y+8),不等价于x=x*y+8。同样:z&=y-x等价于z=z&(y-x),而不等价于z=z&y-x。12.短路表达式Inta=3;!a||a++||b++;实例10进制值二进制值x01100001001y02700010111~x36611110110x&y00100000001x|y03700011111x^y03600011110x204400100100x200200000010当读到a++时不为0,b++不再执行。结果a为4,b为0。13.带有缺省参数的函数的定义及使用规则voidShowMessage(char*Text,intLength=-1,intColor=0);调用ShowMessage函数时,可以指定一个、二个或三个参数:ShowMessage(Helloo);ShowMessage(Helloo,5);ShowMessage(Helloo,5,8);注意:说明缺省参数类似,如果调用函数时省略缺省参数,必须省略所有后续参数,即可以单独省略8但不可以单独省略5.例如,下面的调用是错误的:ShowMessage(Helloo,,8);14.函数的地址传递及值传递地址传递可以改变实参的值。15.inline内联函数doubleAverage(doubletotal,intnumber){returntotal/number;}inlinedoubleAverage(doubletotal,intnumber){returntotal/number;}上面的内联函数同它的非内联函数相比,仅仅是多了一个关键字inline,它们在功能上并没有区别:前者也是有两个形参,一个double型,一个int型,返回值是double型,且两个形参相除后所得的商作为结果返回。但是,编译器对这两个函数的调用过程的处理是不同的。对于内联函数的调用,编译器是将其函数体放在调用的地方,没有非内联函数调用时的栈内存的创建和释放开销。但是,所执行的计算是完全相同的。使用内联函数时应注意以下几个问题:(1)在一个文件中定义的内联函数不能在另一个文件中使用。它们通常放在头文件中共享。(2)内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。(3)内联函数体中,不能有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。(4)内联函数要在函数被调用之前声明。即:#includeiostream.hintincrement(inti);inlineincrement(inti){i++;returni;}//此代码要放在前面才能起到内连函数的作用,否则就是普通函数,无法提高效率。voidmain(){inti=0;while(i3){i=increment(i);coutiisiendl;}}16.全局变量及其调用(1)在开头定义的全局变量全局变量默认定义为0在函数外部定义的变量才是全局变量,调用全局变量的符号为::注意:在main函数开始时定义的变量不是全局变量全局变量在未重名的情况下可以直接调用。(2)在中间或是后边定义的全局变量一般情况下,我们把全局变量的定义放在引用它的所有函数之前。但是,如果在全局变量定义点之前的函数要引用该全局变量或另一个源文件中的函数要引用该全局变量,需要在函数内对要引用的全局变量加extern说明。#includestdio.hintmax(intx,inty);main(){externinta,b;//全局变量说明,而非定义printf(%d\n,max(a,b));return0;}inta=13,b=-8;intmax(intx,inty){intz;z=xy?x:y;returnz;}注意:用extern说明全局变量的时候,不能给初值。例如:externintsize=10;//不再是说明!在主函数内部定义b是不对的,下图为正确的定义方法。17静态变量如果在变量的定义前加上static关键字,就定义了静态变量。static关键字不仅可以放在变量的定义前,也可以放在函数的定义前。在全局函数的定义前加上了static关键字,就称为静态全局函数。静态局部变量的特性也是很有用的。例如,假定我们在一个函数中定义了一个局部变量,需要该局部变量在函数退出时并不释放,下一次进入该函数时,局部变量原来的值还存在,我们就可以把该局部变量定义为静态的。#includeiostream.hvoidfunc(){staticinti=0;couti=++iendl;}voidmain(){for(intx=0;x10;x++)func();}本程序的运行结果为:i=1i=6i=2i=7i=3i=8i=4i=9i=5i=10类似于全局变量,静态局部变量自动初始化为0。18.函数的重载C++中,当有一组函数完成相似功能时,函数名允许重复使用,编译器根据参数表中参数的个数或类型(不能根据形参变量名)来判断调用哪一个函数,这就是函数的重载。例5-26#includestdio.hvoidshow(intval){printf(Integer:%d\n,val);}voidshow(doubleval){printf(Double:%lf\n,val);}voidshow(char*val){printf(String:%s\n,val);}intmain(){show(12);show(3.1415);show(HelloWorld\n!);return(0);}定义重载的函数时,我们应该注意以下几个问题:(1)避免函数名字相同,但功能完全不同的情形。例如上面的重载函数show的功能就是相关的,它们均是向屏幕打印信息。(2)函数的形参变量名不同不能作为函数重载的依据。(3)C++中不允许几个函数名相同、形参个数和类型也相同,仅仅是返回值不同的情形,否则,程序编译时会出现函数重复定义的错误。(4)调用重载的函数时,如果实参类型与形参类型不匹配,编译器会自动进行类型转换。如果转换后仍然不能匹配到重载的函数,则会产生一个编译错误。19.字符数组(1)两种字符串的初始化.数组s1能够保存字符数最多为9个的字符串。象其它数组的初始化一样,字符数组也能在定义时初