C++笔记整理.docx
《C++笔记整理.docx》由会员分享,可在线阅读,更多相关《C++笔记整理.docx(18页珍藏版)》请在冰点文库上搜索。
C++笔记整理
C++笔记整理
1.C++的基本
1.注释的方法:
第一种形式:
”/*字符串*/”;第二种形式:
以”//”开始至行末。
2.using是一个在代码编译之前处理的指令。
namespace称为名称空间,用于解决在程序中同名标识存在的潜在的危机。
又由于iostream是ANSI/ISOC++标准组件库,它所定义的类、函数和变量均放入名称空间std中,因此需要在程序文件的开始位置处指定“usingnamespacestd;”,以便能被后面的程序所使用。
3.C++中,main函数一般用int类型,main后的括号没有参数也不能省略。
4.函数体:
花括号相括的语句序列;各语句以分号结束;一行可以、写多个语句;一个语句可以分多行书写;
5.return:
由于main函数名的前面有一个int,它表示main函数的类型是整型,须在函数体中使用关键字return,用来将其后面的值作为函数的返回值。
return0表示正常结束,return1表示非正常结束。
2.C++的字符集与词汇
1.C++语言的字符集是ASCII码的子集,有:
26个小写字母:
abcdefghijklmnopqrstuvwxyz
26个大写字母:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
10个数字:
0123456789
其他符号:
空格!
″#%&′()*+-/:
;<=>?
[\]^_{|}~.
2.关键字(又称保留字)
关键字是系统预定义的单词。
C++不允许对关键字重定义。
C++常用的关键字:
autobreakcasecharclassconstcontinuedefaultdeleteelseenumexplicitexternfloatforfriendgotoifinlineintlongnewoperatorprivateprotectedpublicregisterreturnshortsignedsizeofstaticstructswitchthistypedefunionunsignedvirtualvoidwhile
3.标识符
语法:
以字母或下划线开始,由字母、数字和下划线组成的符号串。
注意:
不能使用关键字作用户标识符;
C++中,字母大小写敏感;
C++没有规定标识符的长度,不同编译系统有不同的识别长度;标识符尽可能做到见文知义。
4.运算符
运算符是对数据进行操作的简洁表达,调用系统预定义函数。
例如:
+加-减*乘/除
>大于<小于>=大于或等于
==等于!
=不等于<=小于或等于
5.分隔符
用于在程序分隔不同的语法单位,便于编译系统的识别。
常用的分隔符有:
空格,逗号,分号,冒号,括号,注释符等
6.常数
常数由数据的书写形式定义它的类型和值;
基本类型常数在程序运行时直接参与运算,不占用内存存储。
3.C++的数据类型和存储形式
1.C++的数据类型
简单类型:
基本类型:
整型(int)浮点型(float,double)
字符型(char)空类型(void)
用户定义类型:
枚举(enum)用标识符表的序号表示
的数据,每一个枚举常量均有值,值就是枚举常量的顺序号,按定
义时的顺序它们的值依次是0,1,2,…n-1。
结构类型:
数组([])结构(struct)联合(union)类(class)
指针类型:
(*)
2.整型int(占四个字节)
十进制:
0~9数字串第一个数字必须非0。
八进制:
0~7数字串必须以数字0为前缀。
十六进制:
以0x或0X为前缀,十六进制数字串可以为0~9,a~
f(或A~F)。
3.浮点数
float4字节单精度浮点型
double8字节双精度浮点型
longdouble16字节长双精度浮点型
指数形式:
aEn(a为十进制数,n为十进制整数)。
f表示单精度,L表示双精度。
4.字符型
字符,八进制或十六进制值的转义符。
char:
字符一般用ASCII编码
C++的字符型与整型数据密切相关,以ASCII值参与运算
C++转义字符
5.变量的定义
变量定义形式:
类型标识符,标识符,…,标识符;
变量定义同时可以赋初始值.
类型标识符=常量,标识符=常量,…,标识符=常量;
6.标识常量
定义形式:
const类型常量标识符=常量值;
指向常量的指针:
const类型*指针或类型const*指针
注意:
指针常量的值只能在定义的时候初始化。
指向常量的指针常量:
const类型*const指针
7.表达式:
表达式是由数据和运算符,按求值规则,表达一个值的式子。
表达式可以分为:
算术表达式、逻辑表达式、赋值表达式、条件表达式、逗号表达式。
运算符见下表:
注意:
自增、自减算符的运算对象只能是整型变量,不能为常量或表达式;
++、--算符均为右结合,后缀式为书写特例;
自增式和自减式作为独立的表达式,前缀式和后缀式没有区别;但作为表达式右值时:
前缀式先增值后引用,后缀式先引用后增值。
8.强制类型转换
用类型符对表达式值转换成所需类型,一般形式为:
(类型)(表达式)
类型(表达式)
(类型)表达式
9.逻辑运算符
&&逻辑与左结合
||逻辑或左结合
!
逻辑非右结合
逻辑真值表
其中:
a,b均为逻辑值1(true)或0(false)。
逻辑运算规律:
E1&&E2当表达式E1的值为0时,不再对E2求值;
E1||E2当表达式E1值为非0时,不再对E2求值。
10.赋值表达式
赋值表达式的作用是把数据值写入变量,修改对象的值。
一般形式为:
变量=表达式
复合赋值运算符:
双目算符op的表达式:
A=AopB
可以缩写成:
Aop=B
11.条件表达式
条件表达式的格式:
E1?
E2:
E3
注:
?
:
称为条件运算符,是C++中唯一的三目运算符;
E1、E2、E3为表达式。
根据E1的值,决定计算E2或E3。
若E1的值为true(非0),条件表达式的值为E2的值;
若E1的值为false(0),条件表达式的值为E3的值。
例如:
把字母转换成小写:
ch=(ch>='A'&&ch<='Z')?
(ch+32):
ch
12.常用的输出格式控制符
注意:
使用时要包含包含头文件iomanip。
2.程序控制结构
【一】选择控制<1>1.if结构:
if(表达式)语句;
2.ifelse结构:
if(表达式)语句1;
else语句2;
3.if语句的嵌套:
if语句中的执行语句如果又是另一个if语句,称为嵌套if语句
if与else的配对关系:
C++规定,else总是与它接近的if配对
使用复合语句,可以改变条件语句的执行流程
两种不同的嵌套:
if(E1)E1&&E2执行S1
if(E2)S1E1&&!
E2执行S2
elseS2
if(E1)E1&&E2执行S1
{if(E2)S1}!
E1执行S2
elseS2
<2>1.switch结构
一般形式:
switch(表达式)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
…
case常量表达式n:
语句n
default:
语句n+1
}
2.注:
表达式类型为非浮点型;添加break语句跳出switch语句。
各常量表达式类型要与之匹配,各常量表达式要求各不相等;
default子句可选。
缺省时,没有匹配值switch语句为空。
3.switch的嵌套;嵌套结构的case标号与外层无关
switch(i)
{case1:
......
case2:
switch(j)
{case1:
......
case2:
......
......
}
case3:
......
}
【二】循环控制<1>1.while语句:
while(表达式)循环体;
<2>1.do_while语句:
do循环体while(表达式);
<3>1.for语句:
for(表达式1;表达式2;表达式3)
循环体;
2.表达式1为:
初始表达式;表达式2为:
循环控制逻辑表达式;
表达式3为:
循环后置表达。
3.for语句的三个表达式可以缺省,也可以三个表达式同时缺省。
3.C++的格式化输入和输出
【一】1.cout对象:
cout对象只能用来输出数据,也称为“标准输出对象”。
作用是使用标准输出设备(显示器)输出信息。
cout是输出流中的一个对象,因此也称为“流对象”,要输出信息,只需将数据流传送给cout。
输出结果与源代码中字符串的安排不同,cout完全按照提交数据的方式输出,不会自动换行;若想换行输出,有两个方法:
一是cout后加endl;另一个是加’\n’换行符。
2.cin对象
cin对象是C++的“标准输入对象”;cin对象在读取数据时,将暂停程序的运行,直到从键盘输入数据并按Enter键;如果程序要求输入数据,最好向用户提示输入数据类型的提示。
cin对象当输入多个数值时,数值间加空格或者回车键,在输入最后一个数据后,要按回车键。
cin遇到回车,空格和Tab键时将停止读入。
3.格式化输出:
setw,setprecisio,setfill,setiosflags。
用setw操作符为输出数据项指定宽度:
(必须使用头文件iomanip)
注意:
(1)宽度的设置仅适用于下一个插入或读取的数据。
(2)在输出流中控制域宽,如果输出数据的宽度比设置域宽小,将以默认右对齐方式输出数据,左边空位会用填充字符来填充(填充字符默认是空格);
(3)如果输出数据的宽度比设置的宽度大,数据不会被截断,将输出所有位数。
(4)浮点数的小数点也包括在域宽中,字符串中的空格也属于有效的字符,并占域宽。
2.用setprecision操作符指定浮点数的输出精度,即有效位数:
注意:
(1)精度一旦设置,就可以用于以后所有输出的数据,直到
下次精度发生改变。
(2)输出值的精度比setprecision指定的要小,则指定失效。
(3)系统默认精度为6,且四舍五入。
(4)必须包含#include头文件。
用setfill操作符进行数据填充设置
注意:
(1)在默认情况下,如果域宽大于数据宽度时,填充多余空
间的字符是空格;
(2)设置了填充字符后,将对程序后面的输出代码产生永久影响,直到下一次再改变填充字符为止。
4.格式化输入读取一行
cin对象提供的函数成员getline,一次能读取一行
cin.getline(sentence,m);
其中:
(1)第一个参数是数组名,第二个参数是待读取的字符个数,含空字符(包括空格、Tab)。
(2)最多只能读取m-1个字符,最后一个存储’\0’。
5.格式化输入读取一个字符
最简单的方法是使用“>>”。
注意:
>>不能读入空格、Tab和回车键。
cin.get(ch)cin.get可以读入空格、Tab和回车键。
6.读取字符时易出错的地方
采用cin的ignore函数成员可以使cin对象跳过键盘缓冲区的字符:
cin.ignore(n,c);
其中:
(1)两个参数都是可选的,n是一个整数,c是一个字符。
(2)cin跳跃n个字符或者直到遇到字符c为止。
(3)cin.ignore(20,’\n’);表示cin跳跃20个字符或者遇到一个换行符为止。
(4)若cin.ignore没有参数,表示跳过键盘缓冲区的第一个字符。
四.函数
【1】函数的定义:
数据类型函数名(形式参数表)
函数体{语句序列}
数据类型:
定义函数返回值的数据类型。
若无返回值,void。
形式参数表:
函数运行时需要的数据,由主调函数提供。
若无,void或者省略。
函数体可以为空的,成为空函数。
④函数返回值由return语句给出。
⑤函数数据类型=返回值数据类型,可以是任一种数据类型,默认为返回整型值。
【2】无参函数:
数据类型函数名(void)
{函数体}
注:
对无参函数,参数括号中的void通常省略,但括号不能省略。
【3】有参函数:
数据类型函数名(参数类型1形式参数1,参数类型2形式参数2)
{函数体}
注:
有参函数的参数表中列出所有形式参数的类型和参数名称。
各参数即使类型相同也必须分别加以说明。
形式参数简称形参,只能是变量名,不允许是常量或表达式。
C++不允许函数的嵌套定义。
【4】函数的调用
无参函数的调用格式:
函数名()
有参函数的调用格式:
函数名(实际参数表)
实际参数简称实参,用来将实际参数的值传递给形参,实参与形参在个数,类型,位置上一一对应。
【5】cmath中几个常用的数学函数
【6】return语句
return表达式;或return(表达式);
作用:
返回函数值;不再执行后续语句,程序控制返回调用点;
一个函数体内可以有多个return语句;
④表达式返回值的类型与函数类型不相同时,自动强制转换成函数的类型。
【7】函数声明
函数声明是一条以分号结束的语句:
数据类型函数名(形式参数表);
【8】函数重载
C++中,如果需要定义几个功能相似,而参数类型不同的函数,那么这样的几个函数可以使用相同的函数名,这就是函数重载。
重载函数的函数名必须相同;
重载函数的形参必须不同(个数不同/类型不同)。
编译器不以形参名和函数返回值来区分。
【9】默认参数的引入
默认参数指在定义函数时为形参指定默认值(缺省值)。
默认值通常在函数声明中给出,若无函数声明,则可以在定义函数时,给出默认值。
这样的函数在调用时,对于默认参数,可以给出实参值,也可以不给出参数值。
如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按默认值进行调用。
默认参数可以有多个,但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数。
这是因为在函数调用时,参数自左向右逐个匹配,调用时,第一个参数使用默认值,而第二个参数使用指定值,这是错误的。
④在同一个作用域中一个参数只能被指定一次默认值,不可以在声明和定义中同时指定默认值,即使默认值一样也不行。
⑤调用时实参取代形参是从左向右的顺序,默认形参值必须从右向左顺序声明。
【10】全局变量局部变量
(1)全局变量:
在所有函数之外定义的变量称为全局变量。
全局变量可定义在程序开头,也可定义在中间位置,该全局变量在定义处之后的任何位置都是可以访问的。
(2)局部变量:
定义在函数内或块内的变量称为局部变量。
【11】存储类型
存储类型的说明符:
autoregister(修饰的称为自动存储类型)static(修饰的称为静态存储类型)
extern(修饰的称为外部存储类型)
5.构造数据结构
【一】枚举类型
1.枚举类型的一般声明:
enum枚举类型名{枚举常量1,枚举常量2,…,枚举常量n}
2.在定义一个枚举类型时,定义了多个常量,供枚举类型变量取值,称此常量为枚举常量。
当没给各枚举常量指定值时,其值依次默认为0、1、2、…;在定义枚举类型时,也可使用赋值另行指定枚举常量的值。
对于指定值后面的没有指定值的枚举常量,编译器会将前一个常量值加1(下一个整数)赋给它。
3.枚举类型的定义说明:
枚举类型变量可以在定义枚举类型是同时定义;在定义枚举类型的同时定义枚举类型变量可以省略枚举类型名。
4.枚举类型的使用:
用枚举类型建立枚举变量后就可以对枚举变量实施赋值以及进行其它运算了,对枚举变量进行赋值,其值要求为同一枚举类型。
5.对枚举类型实施算术、关系运算时,枚举值转换成整型值参加运算,结果为整型值。
所以,如果要将结果赋给枚举变量,还要将结果转换成枚举值。
例如:
d1=(枚举类型名)d2。
6.枚举常量、枚举类型的变量可直接进行各种形式的关系运算。
7.枚举常量是常量,不是变量,所以不能对枚举常量进行赋值。
8.枚举常量的值不是列举的字符串,其值为整数。
【二】数组
1.一维数组的定义形式:
数据类型数组名[常量表达式]
2.数组元素的类型可以是void型以外的任何一种基本数据类型,也可以是已经定义过的构造数据类型;数组名是用户自定义的标识符,用来表示数组的名称;[]是数组下标运算符,在数组定义时用来限定数组元素的个数。
3.数组定义中的下标不能用变量来描述;不允许使用全局变量的值来确定数组下标。
4.数据类型相同的多个数组可以在同一条语句中予以定义。
数据类型相同的的简单变量和数组也可以在一个语句中定义。
5.一维数组初始化是指在定义数组的同时给数组中的元素赋值。
一般语法形式:
数据类型数组名[常量表达式]={初值1,初值2,…,初值n};
若初值表中初值个数(项数)小于数组的大小,则未指定值的数组元素被赋值为0;但初值表中项数不能为0。
当对全部数组元素赋初值时,可以省略数组的大小,此时数组的实际大小就是初值列表中初值的个数。
初值可以是一个变量表达式,初值与数组元素的对应关系是:
初值i给数组第i个元素;所以,初值个数n不能超过数组的大小。
④存取一维数组元素的一般语法形式为:
数组名[下标表达式];
6.数组名是一个地址常量,不能作为左值(赋值的目标)。
因此,不能将一个数组整体拷贝给另外一个数组。
7.二维数组的定义的一般形式:
数据类型数组名[常量表达式1][常量表达式2];
数据类型数组名[行数][列数];
8.二维数组a[m][n]占内存空间的计算公式为:
sizeof(数组名);或m*sizeof(a[0]);或m*n*sizeof(数据类型)
9.二维数组的初始化:
数据类型数组名[常量表达式1][常量表达式2]=初值表;
嵌套初值表:
数据类型数组变量名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};
线性初值表:
数据类型数组变量名[行常量表达式][列常量表达式]={初值表}。
在定义二维数组时,第一维的大小可以省略,但第二维的大小不能省略。
10.二维数组的存取:
存取维数组元素的格式为:
数组名[行下标表达式][列下标表达式]
行下标表达式与列下标表达式的值同样从0开始,a[i][j]表示数组的第i+1行、第j+1列的元素。
由于数组元素是变量,可以对其进行各种各种操作。
数组元素如果定义数组a[m][n],即数组第1维大小为n,第2维大小为m。
a[i][j]的排列位置与在内存中的地址计算公式如下:
a[i][j]的排列位置=第1维大小n*i+j+1;
a[i][j]的地址=a的起始地址+(第1维大小n*i+j)*sizeof(数据类型)
11.字符数组初始化:
逐个字符对数组元素赋初始值;
用字符串常量初始化;
12.字符串处理函数:
(包含在头文件cstring中)