收藏 分销(赏)

c++语言基础知识汇总PPT课件.ppt

上传人:精**** 文档编号:10040615 上传时间:2025-04-19 格式:PPT 页数:68 大小:1.56MB 下载积分:14 金币
下载 相关 举报
c++语言基础知识汇总PPT课件.ppt_第1页
第1页 / 共68页
c++语言基础知识汇总PPT课件.ppt_第2页
第2页 / 共68页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,1,第二章,C+,语言初步,本章主要内容,1.C+,语言的字符集、词汇,2.,基本数据类型、运算符,与表达式,3.C+,中的,常量,与变量,4.,C+,中的,I/O,5.,基本控制结构,6.,数组、结构体、共用体与枚举类型,7.,指针、,引用,与,动态内存分配,8.,函数与,函数重载,2,1 C+,语言的字符集与词汇,1.,字符集,(1),字母,A B C D,Z a b c d,z,(2),数字,0 1 2 3 4 5 6 7 8 9,(3),特殊符号,空格,!#$%&.,()*,+,,,-,?,/:;,_|,3,2.,词汇:五类,(1),关键字,(,保留字,):,系统预定义且有专门含义的单词,不允许另作它用,.C+,的关键字包含了,C,语言的几乎所有关键字,.C+,的关键字随,C+,的发展而不断增加,(2),标识符:由程序员为程序中的各种成份定义的名字,.,以字母或,_,开头,由字母、,_,、数字组成,.,不能是关键字,.C+,中的标识符区分大小写,.,见名知义的原则,.C+,系统对标识符的长度有一定限制,(3),直接常量,(4),运算符,(5),分隔符:用来分隔不同的语法成份的单词,空格,;#,(),/*/,*C+,的两种注释,:,./*,*/./,注释到行尾,4,2,基本数据类型、运算符与表达式,一,.,数据类型,每一项数据都唯一的属于某种类型,每一数据类型都有一个明确定义的值的集合,每一类型的数据占用相同大小的存储空间,同一类型的数据可以进行相同类型的运算,数据类型,简单类型,复合类型,指针类型 *,用户定义类型,enum,基本类型,整型,int,浮点型,float,字符型,char,空类型,void,布尔型,bool,数组,结构体,struct,共用体,union,类,class,1.C+,的数据类型,基本类型是由系统定义,各种语言都具备的类型,复合类型与指针类型都属于用户定义类型,5,2.,基本类型,int,型:整型,VC,中占,4,字节,float,型,:,浮点型,4,字节,char,型,:,字符型,1,字节,void,型,:,空类型,bool,型,:,布尔型,1,字节 值为,true,或,false,*,修饰说明符,long与short、signed与unsigned,long和short修改整型具有的最大值和最小值,signed和unsigned告诉编译器如何处理整型和字符型数据的最高位,float型可用double和long,double修饰,修改实型数据的表数范围和精度,6,类型名,字节数,取值范围,bool,1,true,、,false,char,1,-128-127,signed char,1,-128-127,unsigned char,1,0-255,int,4,-2,31,-2,31,-1,signed int,4,-2,31,-2,31,-1,unsigned int,4,0-2,32,-1,signed short int,2,-32768-32767,unsigned short int,2,0-2,16,-1,signed long int,4,-2,31,-2,31,-1,unsigned long int,4,0,-2,32,-1,float,4,-3.4E(+/-)38-3.4E(+/-)38,double float,8,-1.7E(+/-)308-1.7E(+/-)308,long double float,10,-3.4E(+/-)4932-3.4E(+/-)4932,C+,中的全部基本类型,7,二,.,运算符与表达式,1.,运算符,算术运算符:,+-,*/%+-,关系运算符:,=,赋值运算符:,=+=-=*=/=%=&=|=,条件运算符:?:,逗号运算符:,指针运算符:,&,*,求字节运算符:,sizeof,函数调用运算符、,强制类型转换,运算符:(),分量运算符:,.-,数组下标运算符:,作用范围分解运算符:,:,动态内存分配符:,new,、,delete,插入提取运算符:,8,运算符的优先级与结合性,运算符,含义,要求操作对象数目,结合性,(),:,.-,括号,作用范围分解,(,限定,),运算符数组下标运算符,成员运算符,左,-,右,+-,&,*,!,+-,(),sizeof,new delete,自增 自减,取地址,指针引用,逻辑非,按位取反,正 负号,强制类型转换,求字节,动态分配 释放内存,1,右,-,左,*/%,乘法 除法 求余,2,左,-,右,+-,加法 减法,2,9,运算符的优先级与结合性(续表),运算符,含义,要求操作对象数目,结合性,左移 右移运算符,2,左,-,右,=,小于 小于等于,大于 大于等于,=!=,等于 不等于,&,|,按位与,按位异或,按位或,&,逻辑与,|,逻辑或,?:,条件运算符,3,右,-,左,=,+=-=*=/=%=,=&=|=,赋值运算符,扩展的赋值运算符,2,右,-,左,,,逗号运算符,2,左,-,右,10,C+,中的类型转换,转换运算符:(),两种强制类型转换的方法,:,(,目标类型名,),表达式:,float x=2.5;int y;,y=(int)x;,目标类型名(表达式):,float x=2.5;int y;,y=int(x);,C+,中的显式转换,static_cast,可以不用强制类型转换但一定会发生转换的地方,(,为了更清楚、更醒目而使用),const_cast,对,const,和,volatile,进行转换,reinterpret_cast,转换为完全不同的意思,必须转换回原来的类型才能安全的使用,最为危险,dynamic_cast,把基类对象,(,指针,),转换为派生类对象,(,指针,),时使用,使用方式,转换用关键字,(,待转换的表达式,),11,例:,static_cast,void,func(int),void,main,(),int,i=0 x7fff;long l;float f;,l=i;f=i;,/,更好的方法是使用,static_cast,l=,static_cast,(i);f=,static_cast,(i);,i=l;i=f;,/,以上两条语句会出,Warning,,可使用如下方式消除,i=,static_cast,(l);i=,static_cast,(f);,char,c=,static_cast,(i);,void,*vp=,float,*fp=(,float,*)vp;/C,的方法,不好,fp=,static_cast,(vp);/,更好的方法,double,d=0.0;,int,x=d;/,自动发生隐式类型转换,x=(,int,)d;/C,的方法,不好,x=,static_cast,(d);/,更好的方法,func(d);/,自动发生隐式类型转换,func(static_cast(d);/,更好的方法,12,例:,const_cast,void,main,(),const int,i=0;,/int*j=,/,错误,不允许这样赋值,int,*k=(int*),/,被摒弃的方法,k=,const_cast,(,/long*l=const_cast(,/,错误,不允许同时进行,const*-nonConst*,/,和,nonConst*-long*,两项转换,13,例:,reinterpret_cast,#include,using namespace,std,;,const int,sz=100;,struct,X,int,asz;,void,print(,X,*x),for,(,int,i=0;isz;i+),cout ai ;,cout endl -endl;,void,main,(),X,x;,print,(,int*xp=,reinterpret_cast,(,for,(,int,*i=xp;ixp+sz;i+),*i=10;,print,(,reinterpret_cast,(xp);,print,(,14,2.,表达式,由运算符连接操作数构成的式子,算术表达式,关系表达式,逻辑表达式,赋值表达式,条件表达式,逗号表达式,15,3,常量与变量,一,.C+,中的常量,1.,直接常量,(,字面常量,):10,,,10.5,,,A,,,string,.,int型 .float型 .char型 .字符串常量 .,bool型:true、false,2.,符号常量:,C+,中有两种符号常量,#define,定义的常量,例:,#define pi 3.1415926,关键字,const,定义的常量,例:,const int sz=100;,#define,定义的常量,在预处理时只是字符串的替换,对编译器而言,不带有任何类型信息,不便于查错;而,const,定义的常量带有类型信息,故优于,#define,定义的常量,C+,推荐使用,const,定义的常量,16,const,常量,定义语法,:,const,类型名 常量名,=,常量值;,或,类型名,const,常量名,=,常量值;,例:,const float pi=3.14;,float const pi=3.14;,const int min=50;,int const min=50;,const int max=2*min;,int const max=2*min;,const,定义的常量,相当于定义了一个相应类型的变量,但其值不能发生改变,例:,const int min=50;,min=40;,/,错误,不能改变,min,的值,所以,,定义,const,常量的同时必须初始化,,且一旦初始化后,就不会,(,因不能故不会,),再发生变化。因此在作用范围内若某变量的值不会发生改变,则定义该变量时应用,const,进行限定,以免无意中改变该变量的值,const,常量是编译时的常量,例:,const int sz=100;,int arrsz;,17,const,与指针,1.,指向常量的指针:,限定指针所指的对象、变量,定义形式:,const,类型*指针变量,=,地址表达式,;,或,类型,const*,指针变量,=,地址表达式,;,例:,int var=35;,const int max=100;,int*p;,const int*p1_const;,const int*p2_const;,p1_const=,p2_const=,var=40;,*p1_const=100;,*p2_const=200;,max=200;,p=,p1_const,和,p2_const,,,var,不是常量,*p1_const和*p2_const、max是常量,18,指向常量的指针,const,int*p1_const,const,int*p2_const,const,int max,int var,p1_const,不是常量,,p1_const,指向的变量的值,不能,通过*,p1_const,改变,但,p1_const,指向的变量即,var,本身不是常量,是,可以,改变的,故,*,p1_const=100;,var=40;,p2_const,不是常量,,p2_const,指向的变量的值,不能,通过*,p2_const,改变,且,p2_const,指向的变量即,max,本身是常量,其值不能改变,故,*,p2_const=200;,max=200;,19,2.,指针常量:,指针变量本身的值初始化后不能再改变,定义方式:,类型*,const,指针变量,=,地址表达式;,例,:int var1=100,var2=200;,const int max=1000;,int*const cst_p1=,int*const cst_p2=,*cst_p1=var2;,cst_p1=,只说明了指针变量如,cst_p1,本身是常量,但并没有说不能改变*,cst_p1,的值,必须要赋初值,20,3.,指向常量的指针常量,指针变量本身和所指对象的值都为常量,不能改变,定义方式:,const,类型*,const,指针变量,=,地址表达式;,或,类型,const*const,指针变量,=,地址表达式;,例:,int var1=128,var2=256;,const int max=1000;,const int*const doubleCst_p1=,const int*const doubleCst_p2=,doubleCst_p1=,*doubleCst_p1=500;,var1=max-var2;,21,二,.C+,中的变量,变量必须先定义,(,声明,),再使用,变量的定义,存储类型 数据类型名 变量名列表;,C+,中,几乎,随处可以定义变量,例:,for(,int i,=0;i100;i+),if(i 100),int x,=0;,x+=100;,int y,=10;,变量的分类:根据定义变量的位置,分为两类:,全局变量,(外部变量),局部变量,(内部变量),22,变量的存储类型,存储方式:动态存储方式和静态存储方式,静态存储方式:程序运行过程中给此类变量分配固定的存储空间,动态存储方式:程序运行过程中根据需要,给此类变量动态分配存储空间,程序代码区,静态存储区,动态存储区,程序的存储组织,23,变量的存储类型,auto,、,register,、,static,、,extern,和默认五种,auto,:自动类型,普通的局部变量都属于此类,分配在动态存储区中,register,:寄存器类型,static,:静态变量,静态局部变量:在静态区中,只初始化一次,多次调用函数时能保留前一次函数调用结束时的值,延长了该变量的,生存期,静态全局变量:在静态区中,限制了该变量的,作用域,extern,:外部变量,定义全局变量,声明外部变量:扩展了全局变量的作用域,24,例:,static,#include,using namespace,std;,int,factor(int n),static int,result=1;,result*=n;,return result;,void,main(),for(,int,i=1;i=8;i+),cout factor(i);,cout endl;,25,例:,extern,/main.cpp,#include,using namespace std;,extern int nTestVar;,void main(),nTestVar=100;,cout nTestVar,变量,向流中添加数据的操作称为插入操作,:,流对象,数据,:,提取运算符,cin,和,cout,是,C+,预定义的流对象,cout:,用于进行输出操作,与显示器相关联,cin:,用于进行输入操作,与键盘相关联,29,用法,:,cout,表达式,1,表达式,2,变量,1,变量,2,变量,n;,可以串联多个,同样也可以串联多个,给多个变量输入数据,输入时多个数据项之间用空格、,Tab,或回车分隔,具有智能,能够自动判断其后的数据项的类型,并采用相应的类型进行输出或输入,使用流对象时,必须,#include,相应的头文件,(,如,iostream),并使用语句,“,using namespace,std;,”,打开名称空间,std,cin,与,cout,在,iostream,中的,std,名称空间中定义,30,二,.,简单的输入,/,输出格式控制:使用操纵符,(manipulator),I/O,流类库中提供了若干个操纵符,可以直接嵌入到输入,/,输出语句中实现,I/O,格式控制,操纵符,功能,endl,输出一个换行符,并刷新流,dec,用十进制输入或输出数值,oct,用八进制输入或输出数值,hex,用十六进制输入或输出数值,ends,输出一个空格符,并刷新流,setw(int n),设置其后一个数据项占据的宽度,setfill(char c),设置数据项宽度不足时的填充字符,setprecision(int n),设置浮点数输出小数位数,常用的,I/O,操纵符,31,说明:,不带参数的,I/O,操纵符定义在,iostream,中,使用带参数的,I/O,操纵符,需包含,iomanip,setw(),只对其后紧跟着的一个真正的数据项起作用,例:,coutAendsBendl;,couthex255ends32endl;,coutdecsetw(5)setfill(0)32endl;,coutsetw(5)setprecision(4)7.5612endl;,屏幕输出,32,5,基本控制结构,顺序、选择,(,分支,),和循环结构,对应的控制语句,控制语句,无条件控制语句,条件控制语句,分支语句,循环语句,if,语句,switch,语句,switch,语句,for,语句,while,语句,do-while,语句,break,语句,continue,语句,return,语句,goto,语句,33,6,数组、结构体、共用体和枚举类型,一,.,数组:需要处理相同类型的一批相关数据时使用,数组分为一维数组与多维数组,定义:,一维数组:类型 数组变量名,数组长度,;,二维数组:类型 数组变量名,第一维长度,第二维长度,;,例:,int nArr10;,int nArr2d105;,说明:,数组长度必须是常量表达式:编译时求值,C,意义上的字符串,采用字符数组作为其存储形式,在最后添加一个,ASCII,码为,0,的字符作为,字符串,的结束标志,34,string,类:字符串类,string,类封装了字符串的基本特性和对字符串的典型操作,其对象可用于保存几乎任意长的字符串,对处理输入文件中一行上字符数不定的情况特别有用,string,类是,STL,中的类,使用时需要包含头文件,string,并打开名称空间,std,string,类的操作:成员函数,求串长:,size(),、,length(),例:,#include,#include,using namespace std;,void PrintAttribute(const string&str),cout size:,str.size(),endl;,cout length:,str.length(),endl;,35,int main(),string s1,s2;,PrintAttribute(s1);,s1=My string object;PrintAttribute(s1);,s2=Another String Object;PrintAttribute(s2);,return 0;,36,赋值:,assign()=,s1.assign(s2);,s1=s2;,连接:,append +=+,s1.append(s2);,s1+=s2;s1=s1+s2;,下标:,s10,#include,#include,using namespace std;,int main(),string s1=cat,s2,s3;,s2=s1;s3.assign(jump);,cout s2 s3 endl;,s1+=s3;,cout s1 endl;,s1.append(and yell);,cout s1 endl;,s10=h;,cout s1 endl;,return 0;,37,比较,string,pare(s2);,比较字符串,s1,与,s2,,当,s1,等于,s2,时,返回,0,;当,s1,大于,s2,时返回正值,否则返回负值,字符串的部分比较,pare(beg1,len1,s2,beg2,len2);,beg1,和,len1,指示,s1,参与比较的开始字符的下标与长度,,beg2,和,len2,指示,s2,参与比较的开始字符的下标与长度,运算符:,!=,38,例:,string,的比较:字符串的排序,#include,#include,using namespace std;,int main(),string names=Li Hua,He XiaoMing,Zhang Li,Sun Fei,Chen Bao;,string s;,int i,j,k,nmb;,nmb=,sizeof(names)/sizeof(names0),;,for(i=0;inmb-1;i+),k=i;,for(j=i+1;jnamesj,)k=j;,if(k!=i),s=namesk;namesk=namesi;namesi=s;,for(i=0;inmb;i+),cout name i =namesi endl;,return 0;,39,子串:,substr(),s.substr(beg,len);,beg,指定子串的开始下标,,len,指定读取的字符数,string s=C+program design,;,cout s.substr(4,7)=0),alphabet.replace(x,1,;);,x=alphabet.find(,x+1);,cout alphabet endl;,return 0;,41,插入:,insert(),s1.insert(n,s2);,例:,string s1=cat jump;,string s2=dog;,s1.insert(4,s2);,s1.insert(4,and);,cout s1 endl;,42,转换成,C,语言式的,char*,型字符串:,data()c_str()copy(),char*ptr=,s.data();/char*ptr=s.c_str();,s.copy(buffer,n,begin);,#include,#include,using namespace std;,int main(),string s=String Object;,const char*ptr1;,ptr1=s.data();,int len=s.length();,char*ptr2=new charlen+1;,s.copy(ptr2,len,0);ptr2len=0;,cout s endl;,cout ptr1 endl;,cout ptr2 endl;,delete ptr2;,return 0;,43,从文件中输入一行字符:,getline(),getline(in,,,str,,,ch);,其中:,in,为输入流对象,str,为,string,类对象,ch,为结束输入的字符,默认为,n,例:,string s;,getline(cin,s,n);,从键盘输入一行字符,(,以回车结束,),,存入,s,中,44,例:从文件中输入一行数据,#include,#include,#include,using namespace std;,int main(),string line;,ifstream input(input.txt,ios:in);,while(1),getline(input,line);,if(input.eof()break;,/,一行数据已存入,line,中,可对其处理,此处只将其输出,cout line y?x:y;,void main(),int a,b;,cin a b;,cout max(a,b)endl;,60,例:内联函数,*,注意,.,若,inline,不在函数名第一次出现时指定,则编译器把该函数做为普通函数对待,.,内联函数的函数体应尽可能简洁,否则会增加程序的体积,.,内联函数中不能包含复杂的流程控制语句,否则,inline,关键字将不会起作用,该函数将成为普通函数,.inline,函数不能递归,也不能包含静态变量,inline int isnumber(char);,void main(),char c;,int n;,n=0;,while(c=getchar()!=n),if(isnumber(c)n+;,cout n=n=0,61,.,带缺省实参值的函数,声明或定义函数的同时,可对函数的某些参数进行初始化,该初始化的值称做缺省实参值。调用该函数时,可传递少于形参数目的参数,对缺少实参值的参数,函数使用缺省的实参值,.,声明或定义形式,:,类型名 函数名,(,参数类型,1,参数名,1=,缺省值,1,参数类型,2,参数名,n=,缺省值,n),例,:void showchar(char c,int times=20),for(int i=1;i=times;i+),cout c;,cout 0?x:-x;,long abs(long x),return x0?x:-x;,float abs(float x),return x0?x:-x;,例,:int max(int x,int y),return xy?x:y;,long max(long x,long y),return xy?x:y;,float max(float x,float y),return xy?x:y;,65,.,函数重载的必要性,.,C+,实现函数重载的机制,:,可能的方案:对函数名进行修饰,例,:,三个,abs(),函数,C+,处理时,在内部给函数名加上了前缀或后缀,以区分重载的一组函数,进行修饰后三个函数的名字可能是:,abs_int()abs_long()abs_float(),.,多个函数共用同一个名字,而这些函数进行的操作与完成的功能大体上相同,只是所操作的数据的类型不同,对这些函数以一个统一的名字调用,符合人的思维习惯,便于阅读理解程序,66,.,函数修饰指示符,.,extern C,:函数按,C,中方式处理,不允许重载,.,extern C+,:,缺省方式 允许函数重载,例:,extern C,void f(),void f(int),extern C,void f(),void g(),extern C+,void f(),void f(int),67,*,注意,:,.,重载的多个函数应在参数数目或参数的类型上有所区别,.,函数的返回值不能用来区别重载的函数,.,引用参数不能用来区别重载的函数,.,函数带有缺省实参时可能造成二义性,例:,int sum(int a,int b,int c=0);,int sum(int a,int b);,应避免这种问题,.,重载的函数应该是功能相同或相似的一组函数,不要把完全没有关系的函数进行重载,68,作业,swap,函数的各种情况,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服