收藏 分销(赏)

山大计算机数据结构ppt电子版资料C--概述.ppt

上传人:仙人****88 文档编号:14677315 上传时间:2026-10-28 格式:PPT 页数:50 大小:158.50KB 下载积分:10 金币
下载 相关
山大计算机数据结构ppt电子版资料C--概述.ppt_第1页
第1页 / 共50页
山大计算机数据结构ppt电子版资料C--概述.ppt_第2页
第2页 / 共50页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,山东大学计算机学院,*,C+,概述,一、基础知识,1.,C+,的函数特征,C+,程序可有多个文件组成,这些文件分为两类:头文件(.,h),和源程序文件(.,cpp,),头文件用于存放函数的返回类型、参数类型、参数个数,成为函数原型。,主程序和.,cpp,文件通过“#,include”,定位到头文件,实现对原型的访问性,函数和数据定义放在.,cpp,源程序文件中,注释:/,/*/,2026/10/28,2,山东大学计算机学院,一、基础知识,2.输入输出,C+,中执行,I/O,操作,需#,include,一个,头文件,用以支持流操作,预定义类,istream,和,ostream,定义了输入流和输出流,C+,提供了一套面向对象的流输入输出方法,其相应操作符为,cin,和,cout,,,与、一起完成,c+,的输入输出操作,int,i;,cout,i;,2026/10/28,3,山东大学计算机学院,一、基础知识,I/O,操作符:,endl,(,换行并清空流),ends(,输出空),flush(,清空流),ws,(,跳过前导空白),文件,I/O,#,include,类,ifstream,ofstream,fstream,例:,ofstream outfile,(“my.out”),2026/10/28,4,山东大学计算机学院,一、基础知识,3、变量,c+,中任何变量在使用前一定要预先定义,int,i,j,k;float a;double v1,v2;,变量定义时可同时赋初值,允许在函数中任何地方定义变量,转义字符:,数字转移码:,xdd,:,用十六进制表示一个字符:,x61,表示,a,ddd,:,用八进制表示一个字符:141表示,a,2026/10/28,5,山东大学计算机学院,一、基础知识,类型转换,同一表达式中类型不同,会自动转换,低级别转换为高级别,赋值运算符,等号右边类型向左转换,int,sum,j;float k;,sum=j+k;,强制类型转换,(,type),表达式,2026/10/28,6,山东大学计算机学院,一、基础知识,常量,定义变量时加上,const,限定符,const,int,j=100;,定义常量时,如缺省数据类型则为整数型,定义常量时,必须同时给定初值,支持用#,define,宏来定义常数变量,但这种定义没有数据类型,而,const,定义的变量均有数据类型,2026/10/28,7,山东大学计算机学院,一、基础知识,4.存储类,auto,extern,static,register,1)自动变量(,auto),自动变量也叫局部变量,编译器利用堆栈为自动变量分配存储空间。当程序执行到变量所在段之外时,该空间被系统收回,变量亦随之消失,自动变量是缺省存储类型,2026/10/28,8,山东大学计算机学院,一、基础知识,2)外部变量(,extern),外部变量也叫全局变量,在程序运行期间永不消失,并可被所有函数使用,凡定义在函数之外的变量都是外部变量,使用外部变量可以在函数之间传递数据,使用另一文件中定义的全局变量需用,extern,声明,extern,int,j;,局部变量与全局变量名称相同时,在局部变量的定义区间内,局部变量覆盖全局变量;此时可使用域操作符(:)存取全局变量,2026/10/28,9,山东大学计算机学院,一、基础知识,3)静态变量(,static),静态变量也属于局部变量,编译器使用固定地址存放静态变量,而不是使用堆栈,所以静态变量所用内存不会随函数的退出而被覆盖,4)寄存器变量(,register),寄存器变量存放于处理器的寄存器中,可以加快程序的执行速度,用于那些使用十分频繁的变量,程序中不可大量使用寄存器变量,2026/10/28,10,山东大学计算机学院,一、基础知识,5.用户自定义数据类型,(1)数组,数组是一组类型相同的数据,定义:数组类型 数组名称长度,例子:,double j4;char temp233;,可在数组定义时设定数组的初值,例子:,char,str,10=“,abcedef,”,2026/10/28,11,山东大学计算机学院,一、基础知识,(2)结构,可以表示不同类型数据的集合,用关键字,struct,说明,Stuct mystruct,char instructor9;,float score;,结构成员引用,通过结构变量使用“.”操作符,通过结构指针使用“-”操作符,2026/10/28,12,山东大学计算机学院,一、基础知识,(3)联合,联合的定义类似于结构,Union,联合名称,/联合成员,联合中的个不同成员共享一个存取区域,不同成员不可同时存在于内存中,同一时间只有一种数据类型存在,2026/10/28,13,山东大学计算机学院,一、基础知识,(4)枚举类型,枚举类型是一种用户自定义的数据类型,用来为一组整数值提供助记符,enum,days sun,mon,tus,wed,thu,fri,satad;,第一个枚举符的值为0,后续依次递增1,枚举变量只能赋以相应的枚举符之一,不可设置整数值或整数变量,(5),typedef,typedef,数据类型 标识符;,typedef struct mystruct ps,;,2026/10/28,14,山东大学计算机学院,一、基础知识,6.指针,(1)指针定义,数据类型*指针变量;,指针也是一种变量,其内容是其所指对象的地址,指针定义时不要求初始化,但必须在使用之前进行赋值,i=5,*,ptr,;,Ptr,=,两大类:指向对象的指针,指向函数的指针,2026/10/28,15,山东大学计算机学院,一、基础知识,(2)指针运算,对象指针可与整型数进行加减运算,指针将向前或向后移动整数值个单位,每个单位的长度等于所指数据对象的长度,(3)指向函数的指针,函数指针可理解为地址,该函数的代码从此地址开始存放,Int strcomp,(char*,char*);,Int,(*,ptr,)(char*,char*);,Ptr,=,strcmp,;,区别:,int,*,ptr,(char*,char*);,含义为函数,ptr,其返回值为整数型指针,2026/10/28,16,山东大学计算机学院,一、基础知识,7.语句,(1)操作符,算术运算符,关系运算符,逻辑运算符:与,&,或|,非!,位运算符,&与运算,|或运算,求反,异或,右移,2026/10/28,17,山东大学计算机学院,一、基础知识,(2)条件语句,If else,Ifelse if,(3),开关语句,switch(,条件表达式),Case,常量表达式1,语句1;,break;,Default:,2026/10/28,18,山东大学计算机学院,一、基础知识,(4)循环语句,For(,初始化语句;条件语句;控制语句),While(,条件语句),语句1;,语句,n;,Do,语句1,语句,n;,while(,条件语句);,2026/10/28,19,山东大学计算机学院,一、基础知识,(5)跳转语句,Break,用于,for,while,do-while,或,switch,语句的循环体中,用来终止循环或,swith,语句的执行,Continue,出现在循环体中,使循环马上停止执行后面的语句,转而执行下一次条件测试,Goto,语句,Return,语句,控制函数返回到调用者,返回函数值,2026/10/28,20,山东大学计算机学院,一、基础知识,8.函数,函数的基本功能是接收参数,执行代码完成一定功能,然后向调用程序返回一个结果,(1)函数定义,函数在使用前要先用原型来定义,这有利于编译器在函数调用时执行更完全的数据类型检查,返回类型 函数名(参数列表),数组参数,形如:,int,r,声明,(2)参数传递,传值法,传址法,传址时,参数为指针,直接使用变量名;否则用&取址,2026/10/28,21,山东大学计算机学院,一、基础知识,(3)函数缺省参数,须在函数原型定义时指定参数的初值,Int,max(,int,i=0,int,j=0);,缺省参数必须放在参数序列的最右边,(4)Inline,函数,调用时,编译器直接用函数体的编译代码插入在函数调用语句处,提高运行速度,方法:函数定义前加,inline,关键字,嵌入函数须放在调用它的函数的前面,2026/10/28,22,山东大学计算机学院,一、基础知识,9.动态存储分配,malloc,(),和,free(),兼容,C,语言,new,和,delete,new,按指定类型分配足够空间,不要求调用者提供所需空间数量,使用,new,分配的存储需显式地用,delete,释放,new,使用被建立对象的数据类型作参数,返回分配地址的指针,例:,int,*,ip,=new,int,;,point*p=new point100;delete p;,2026/10/28,23,山东大学计算机学院,二、类与数据封装,1.类定义,Private,public,protected,三种变量与函数,默认为私有类型,通过对象调用类成员,Cur_times.display();,通过指针访问类成员,Ptr,-display();,成员函数可定义于类外,此时可加上类名和:声明其所属的类,2026/10/28,24,山东大学计算机学院,二、类与数据封装,2.构造函数,作用是为新创建的对象分配空间,或为该对象的数据成员赋值等,构造函数名称与类名相同,构造函数不允许有返回值,也不允许定义返回值类型,其中包括,void,类型,但可以有参数,构造函数在对象定义时由系统最先调用,可以用构造函数的参数来初始化类的成员,2026/10/28,25,山东大学计算机学院,二、类与数据封装,3.析构函数,当对象删除时,用来执行一些必要的操作,析构函数的名称与类名称相同,前面加符号,不允许有返回值,不允许带参数,一个类中只能有一个析构函数,而可以有多个构造函数,例:,person(),2026/10/28,26,山东大学计算机学院,二、类与数据封装,4.类静态成员,同一个类定义多个对象时,每个对象拥有各自的数据成员,所有对象共享一份成员函数,静态数据成员对于类的所有对象只有一份,定义:变量定义前加,static,Static,int,count;,静态数据成员应在类的对象前进行初始化,引用静态成员时应通过类而非对象,例:,int,counter:count=0;,2026/10/28,27,山东大学计算机学院,二、类与数据封装,5.类的友员,友员类:将某类定义为另一类的友员,Class class1,Friend class,friendclass,;,/,友员函数可在类的任何地方定义,前加关键字,friend,使用友员函数或友员类可访问类的私有成员,虽然在类内定义,友员函数不属于类的数据成员,不能继承,不能使用,this,指针访问,2026/10/28,28,山东大学计算机学院,二、类与数据封装,6.对象,类实例化为对象,point a(6,3);,自动地,point b;,自动地,static point c(3,4);,静态地,point*d=new point(1,1);,动态分配,main,函数执行结束,释放静态变量,2026/10/28,29,山东大学计算机学院,三、继承,1.基类与派生类,通过继承,派生类拥有基类的数据成员和成员函数,定义:,class,派生类名:访问权限 基类名称,例:,class application:Public software,访问权限:公用基类,私有基类,访问权限默认为是,private,公用基类中的,public,仍,public,protected,仍是,protected,私有基类中的,public,protected,均变成,private,无论公用还是私有基类,private,成员不能被继承,2026/10/28,30,山东大学计算机学院,三、继承,类的保护成员具有继承性,可以被其派生类的成员函数和友员函数所使用,派生类的成员与其基类的成员有相同名称时,系统将基类的成员隐藏起来;仍可借助于域操作符:访问,基类的构造函数和析构函数不能被派生类显示调用,但在建立派生类时由系统自动调用,友员函数不能被继承,因起非类的成员函数,父亲的朋友未必是子女的朋友,2026/10/28,31,山东大学计算机学院,三、继承,2.多重继承,C+,允许一个类同时继承多个基类的成员,Class draw:public pen,public paper,多重继承下的每个基类分别设置存取权限,每个基类前的存取权限标识符不影响后面的基类,3.多层继承,2026/10/28,32,山东大学计算机学院,三、继承,4.派生类的构造函数与析构函数,派生类的构造函数负责调用基类的构造函数来设置基类数据成员的初值,例:,derive:derive(,int,k,double l):base(k),向派生类构造函数传递的参数不仅用来设置派生类的数据成员,还要向其基类的构造函数传递,各基类的构造函数用逗号隔开,多层继承中派生类的构造函数只需调用其上一层基类的构造函数,顺序:先基类后派生类,析构相反,2026/10/28,33,山东大学计算机学院,三、继承,5.基类与派生类对象指针的转换,由于继承的关系,派生类对象就是基类对象,把派生类对象指针赋给基类对象指针是合法的,编译程序隐式完成这种类型转换,还能把对派生类对象的引用隐式的转换为对基类的引用,例:基类,polygon,派生类,rectangle,rectangle q;polygon*p=q;,但指向基类对象的指针只能“看到”派生类对象中的基类部分,必要时可采用显式的类型转换将基类对象的指针强制转换为派生类对象指针,引用派生类对象,例:,polygon*p;rectangle*q;q=(rectangle*)p;,2026/10/28,34,山东大学计算机学院,四、重载,1.函数重载,重载函数:有相同的名称,而有不同的参数个数和参数类型或返回类型,程序调用时,由编译器根据所传递的参数类型选择所有调用的函数,不能以函数的不同返回值类型作为重载的标志,2026/10/28,35,山东大学计算机学院,四、重载,2.操作符重载,定义方法:,声明:返回值类型,operator op(,参数表),定义:返回值类型 类名:,operator op(,参数表),操作符处理代码,例-字符串加法:,String String:operator+(char*,ptr,),strcpy,(,str,name);,strcat,(,str,ptr,);return String(,str,),重载操作符作为类成员使用时,它处理的数据有一个是对象本身,故比正常运算符少1,2026/10/28,36,山东大学计算机学院,四、重载,重载操作符定义为友员函数更为灵活,这样可以实现更接近于使用习惯的运算,friend String operator+(char*,const String);,String operator+(char*,const String a),strcpy,(,str,ptr,);,strcat,(,str,a.name);,return String(,str,),2026/10/28,37,山东大学计算机学院,四、重载,3.,通过重载实现类的类型转换,转换函数:,operator,数据类型();,每个派生类对象都含有一份其公有基类的数据,所以可以直接将派生类对象赋值给其公有基类对象,同样,指向派生类对象的指针可以赋值给其公有基类的对应数据类型,反之,将基类对象或指针赋值给派生类的对应数据类型时,需作类型的强制转换,2026/10/28,38,山东大学计算机学院,五、虚拟函数与多态性,多态性建立在虚拟函数基础上,虚拟函数的式用是类的成员函数表现出多态性,1.静态连接与动态连接,静态连接:编译器在连接时用函数的物理地址调用该函数,在程序执行时进行选择、判断应调用那个函数,动态连接一般采用函数指针或函数参考类型方时调用来实现,2026/10/28,39,山东大学计算机学院,五、虚拟函数与多态性,2.虚拟函数,定义:,virtual,函数类型 函数名称(参数序列),只有类的成员函数才能定义为虚拟函数,虚拟函数要求(函数名称、返回值、参数序列)完全相同,调用:指向基类的指针可以用于派生类,所以调用虚拟函数一般都是通过首次定义该函数的基类指针或参考变量,最终调用哪个函数取决于指针或参考变量指向哪一类的对象,2026/10/28,40,山东大学计算机学院,五、虚拟函数与多态性,例:,A,是,B,的基类,都有虚拟函数,show(),A demo1,*,ptr,;B demo2;,ptr,=,ptr,-show();,ptr,=,ptr,-show();,一般在基类中定义处理某一问题的接口和数据元素,而在派生类中定义具体的处理方法,通常将基类中对问题的处理接口设计为虚拟函数,然后利用基类对象通过动态连接方式调用虚拟函数,达到单一接口、多种功能的目的,2026/10/28,41,山东大学计算机学院,五、虚拟函数与多态性,3.纯虚函数,定义,virtual,函数类型 函数名称(参数序列)=0,将基类的虚拟函数定义为纯虚函数,即不实现具体功能,仅作为一个抽象接口,包含纯虚函数的类叫做抽象类,抽象类不能实例化对象,但可以定义指向它的指针,纯虚函数一定要在派生类中定义和实现,2026/10/28,42,山东大学计算机学院,五、虚拟函数与多态性,例:基类,pen,中定义:,virtual void draw()=0;,派生类,point,中实现:,void draw(),cout,“Draw a point,”,endl,;,派生类,circle,中实现:,void draw(),cout,“Draw a circle,”draw();,ptr,=,ptr,-draw();,2026/10/28,43,山东大学计算机学院,五、虚拟函数与多态性,4.虚拟基类,定义:在派生类定义时在基类名前加,virtual,class A2:virtual public A1,将一基类定义为虚拟基类后,即使它被多重继承,编译器也只在派生类中生成一份基类成员,不会产生多重拷贝,在含虚拟基类的多层继承关系中,虚拟基类的构造函数调用由最远的派生类负责,2026/10/28,44,山东大学计算机学院,六、模板,模板是一种使用无类型参数来产生一系列函数或类的机制,通过模板可以产生类或函数的集合,使它们操作不同的数据类型,避免为每一种数据类型都产生一个单独的类或函数,例:,templatetype max(type a,type b)return(ab)a,b;,2026/10/28,45,山东大学计算机学院,六、模板,1.函数模板,建立一个处理不同数据类型或类的函数集合,定义:,templatetype fun,(,type,),第一部分,模板类型定义,template,第二部分,函数定义,例:交换函数模板,templatevoid,myswap,(,type&a,type&b),type temp;temp=a;a=b;b=temp;,实例化:,myswap,(10,20);,myswap,(50.5,100.9);,2026/10/28,46,山东大学计算机学院,六、模板,编译时,用每一种数据类型实例化函数模板时,编译器为该数据类型创建一个函数实例,标准的数据类型和转换不适应于函数模板,函数模板需执行严格的类型匹配,使用函数模板时,用户可以为某一个特定的数据类型定义一个非模板函数,在用这种数据类型参数调用函数时,编译器使用的是非模板函数,2026/10/28,47,山东大学计算机学院,六、模板,2.类模板,为各种不同数据类型生成一类的集合,定义:,template,class Demo,type arrayI;,int arraysize,;,public:,demo();,demo();,Int,set(type a,int,b);,实例化:,int,size;,demo test;,2026/10/28,48,山东大学计算机学院,六、模板,类成员函数的定义,template,int,demo:set(type a,int,b),必须在类名称的后面加上类型参数,例:,template,int,demo:set(type a,int,b),if(b=0)&(bI),arrayb+=a;,return,sizeof,(a);,else return 1;,类模板函数只有在被调用后才被实例化,2026/10/28,49,山东大学计算机学院,课件下载和,BBS,202.194.7.33,用户名:,guest,口 令:,guest,2026/10/28,50,山东大学计算机学院,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

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

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

关于我们      便捷服务       自信AI       AI导航        关注我们

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

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

客服