C++的产生和发展从C语言发展演变而来,最初被称为带类的C;1983年正式取名为C++;1998年11月被国际标准化组织(ISO)批准为国际标准;2003年10月15日发布第2版C++标准ISO/IEC14882:2003;2011年8月12日ISO公布了第三版C++标准C++11,包含核心语言的新机能、扩展C++标准程序库。2014年8月18日ISO公布了C++14,其正式名称为InternationalStandardISO/IEC14882:2014(E)ProgrammingLanguageC++。C++14作为C++11的一个小扩展,主要提供漏洞修复和小的改进。C++的特点兼容C,支持面向过程的程序设计;支持面向对象的方法;支持泛型程序设计方法。命名空间避免命名冲突std是C++标准库的命名空间(namespace)名usingnamespacestd表示打开std命名空间例2-1//2_1.cpp#includeiostreamusingnamespacestd;intmain(){coutHello!endl;coutWelcometoc++!endl;return0;}运行结果:Hello!Welcometoc++!C++字符集和词法记号字符集大小写的英文字母:A~Z,a~z数字字符:0~9特殊字符:!#%^&*_+=-~/\‘“;.,:?()[]{}|词法记号关键字C++预定义的单词标识符程序员声明的单词,它命名程序正文中的一些实体文字在程序中直接使用符号表示的数据分隔符(){},:;用于分隔各个词法记号或程序正文运算符(操作符)用于实现各种运算的符号空白符空格、制表符(TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称标识符的构成规则以大写字母、小写字母或下划线(_)开始。可以由以大写字母、小写字母、下划线(_)或数字0~9组成。大写字母和小写字母代表不同的标识符。不能是C++关键字或操作符。基本数据类型、常量、变量C++能够处理的基本数据类型整数类型;浮点数类型;字符类型;布尔类型。程序中的数据常量在源程序中直接写明的数据;其值在整个程序运行期间不可改变。变量在程序运行过程中允许改变的数据。整数类型基本的整数类型:int按符号分符号的(signed)无符号的(unsigned)按照数据范围分短整数(short)长整数(long)长长整数(longlong)ISOC++标准并没有明确规定每种数据类型的字节数和取值范围,它只是规定它们之间的字节数大小顺序满足:(signed/unsigned)signedchar≤(unsigned)shortint≤(unsigned)int≤(unsigned)longint≤longlongintchar)容纳单个字符的编码;实质上存储的也是整数。浮点数类型单精度(float)双精度(double)扩展精度(longdouble)字符串类型(详见第6章)有字符串常量基本类型中没有字符串变量采用字符数组存储字符串(C风格的字符串)标准C++类库中的String类(C++风格的字符串)布尔类型(bool)只有两个值:true(真)、false(假)常用来表示关系比较、相等比较或逻辑运算的结果各基本类型的取值范围常量在程序运行的整个过程中其值始终不可改变的量;直接使用符号(文字)表示的值;例如:12,3.5,'A'都是常量。整数常量以文字形式出现的整数;十进制若干个0~9的数字,但数字部分不能以0开头,正数前边的正号可以省略。八进制前导0+若干个0~7的数字。十六进制前导0x+若干个0~9的数字及A~F的字母(大小写均可)。后缀后缀L(或l)表示类型至少是long,后缀LL(或ll)表示类型是longlong,后缀U(或u)表示unsigned类型。浮点数常量以文字形式出现的实数;一般形式:例如,12.5,-12.5等。指数形式:例如,0.345E+2,-34.4E-3;整数部分和小数部分可以省略其一。浮点常量默认为double型,如果后缀F(或f)可以使其成为float型,例如:12.3f。字符常量单引号括起来的一个字符,如:'a'、'D'、'?'、'$';C++转义字符列表(用于在程序中表示不可显示字符)C风格字符串常量一对双引号括起来的字符序列;在内存中按串中字符的排列次序顺序存放,每个字符占一个字节;在末尾添加‘\0’作为结尾标记。例:通过添加前缀可以改变字符常量或者字符串常量的类型,前缀及其含义如下表所示:变量:在程序的运行过程中,其值可变的量变量定义数据类型变量名1,变量名2,...,变量名n;初始化C++语言中提供了多种初始化方式;例如:inta=0;inta(0);inta={0};inta{0};其中使用大括号的初始化方式称为列表初始化,列表初始化时不允许信息的丢失。例如用double值初始化int变量,就会造成数据丢失。符号常量常量定义语句的形式为:const数据类型说明符常量名=常量值;或:数据类型说明符const常量名=常量值;例如,可以定义一个代表圆周率的符号常量:constfloatPI=3.1415926;符号常量在定义时一定要初始化,在程序中间不能改变其值。算术运算与赋值运算算术运算基本算术运算符+-*/(若整数相除,结果取整)%(取余,操作数为整数)优先级与结合性先乘除,后加减,同级自左至右++,--(自增、自减)例:i++;--j;赋值运算将值赋给变量赋值运算符“=”赋值表达式:用赋值运算符连接的表达式例:n=5n=n+5表达式的值赋值运算符左边对象被赋值后的值表达式的类型赋值运算符左边对象的类型复合的赋值运算符+=,-=,*=,/=,%=,=,=,&=,^=,|=例a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)逗号运算、关系运算、逻辑运算和条件运算逗号运算和逗号表达式格式表达式1,表达式2求解顺序及结果先求解表达式1,再求解表达式2最终结果为表达式2的值例a=3*5,a*4最终结果为60关系运算与关系表达式关系运算是比较简单的一种逻辑运算,优先次序为:关系表达式是一种最简单的逻辑表达式其结果类型为bool,值只能为true或false。例如:ab,c=a+b,x+y==3逻辑运算与逻辑表达式逻辑运算符!(非)&&(与)||(或)优先次序:高→低逻辑运算结果类型:bool,值只能为true或false逻辑表达式例如:(ab)&&(xy)“&&”的运算规则两侧表达式都为真,结果为真;有一侧表达式为假,结果为假。“&&”的“短路特性”表达式1&&表达式2先求解表达式1若表达式1的值为false,则最终结果为false,不再求解表达式2若表达式1的结果为true,则求解表达式2,以表达式2的结果作为最终结果“||”的运算规则两侧表达式都为假,结果为假;有一侧表达式为真,结果为真。“||”的“短路特性”表达式1||表达式2先求解表达式1若表达式1的值为true,则最终结果为true,不再求解表达式2若表达式1的结果为false,则求解表达式2,以表达式2的结果作为最终结果条件运算符与条件表达式一般形式表达式1?表达式2:表达式3表达式1必须是bool类型执行顺序先求解表达式1,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果若表达式1的值为false,则求解表达式3,表达式3的值为最终结果条件运算符优先级高于赋值运算符,低于逻辑运算符例表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型。Sizeof运算、位运算sizeof运算语法形式sizeof(类型名)或sizeof表达式结果值:“类型名”所指定的类型,或“表达式”的结果类型所占的字节数。例:sizeof(short)sizeofx位运算——按位与(&)运算规则将两个运算量的每一个位进行逻辑与操作举例:计算3&5用途:将某一位置0,其他位不变。例如:将char型变量a的最低位置0:a=a&0xfe;;(0xfe:11111110)取指定位。例如:有charc;inta;取出a的低字节,置于c中:c=a&0xff;(0xff:11111111)位运算——按位或(|)运算规则将两个运算量的每一个位进行逻辑或操作举例:计算3|5用途:将某些位置1,其他位不变。例如:将int型变量a的低字节置1:a=a|0xff;位运算——按位异或(^)运算规则两个操作数进行异或:若对应位相同,则结果该位为0,若对应位不同,则结果该位为1,举例:计算071^052用途举例:使特定位翻转(与0异或保持原值,与1异或取反)例如:要使01111010低四位翻转:位运算——取反(~)运算规则单目运算符,对一个二进制数按位取反。例:025:0000000000010101~025:1111111111101010位运算——移位(、)左移运算()左移后,低位补0,高位舍弃。右移运算()右移后:低位:舍弃高位:无符号数:补0有符号数:补“符号位”运算优先级、类型转换运算符优先级优先级运算符结合性1[]().–后置++后置––左→右2前置++前置––sizeof&*+(正号)–(负号)~!右→左3(强制转换类型)右→左4.*-*左→右5*/%左→右6+–左→右7左→右8==左→右9==!=左→右10&左→右11^左→右12|左→右13&&左→右14||左→右15?:右→左16=*=/=%=+=–===&=^=|=右→左17,左→右混合运算时数据类型的转换一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。条件转换有一个操作数是longdouble型。将另一个操作数转换为longdouble型。前述条件不满足,并且有一个操作数是double型。将另一个操作数转换为double型。前述条件不满足,并且有一个操作数是float型。将另一个操作数转换为float型。前述条件不满足(两个操作数都不是浮点数)。有一个操作数是unsignedlonglong型。将另一个操作数转换为unsignedlonglong型。有一个操作数是longlong型,另一个操作数是unsignedlong型两个操作数都转换为unsignedlonglong型。前述条件不满足,并且有一个操作数是unsignedlong型。将另一个操作数转换为unsignedlong型。前述条件不满足,并且有一个操作数是long型,另一个操作数是unsignedint型。将两个操作数都转换为unsignedlong型。前述条件不满足,并且有一个操作数是long型。将另一个操作数转换为long型前述条件不满足,并且有一个操作数是unsignedint型。将另一个操作数转换为unsignedint型。前述条件都不满足将两个操作数都转换为int型。将一个非布尔类型的算术值赋给布尔类型时,算术值为0则结果为false,否则结果为true。将一个布尔值赋给非布尔类型时,布尔值为false则结果为0,布尔值为true则结果为1将一个浮点数赋给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失。将一个整数值赋给浮点类型时,小数部分记为0。如果整数所占的空间超过了浮点类型的容量,精度可能有损失。混合运算时数据类型的转换——显式转换显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。语法形式