资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,高级语言程序设计,陈 丛,xhcongchen,第一章,C+,的初步知识,1.1,从,C,到,C+,1.2,最简单的,C+,程序,1.3 C+,对,C,的扩充,1.4 C+,程序的编写和实现,1.5,关于,C+,上机实践,1.2,最简单的,C+,程序,例,1.3,输入两个数,x,和,y,,求两数中的大者。,#include,using namespace std;,int,main(),int,max(int,x,int,y);,int,a,b,c,;,cin,ab;,c=,max(a,b,);,cout,“max=“cy),z=x;,else,z=y;,return z;,例,1.4,包含类的程序。,#include,using namespace std;,class student,private:,int,num;,int,score;,public:,void,setdata,(),cin,numscore;,void display(),cout,“num=“num,endl,;,cout,“num=“num,endl,;,;,student stud1,stud2;,int,main(),stud1.setdata();,stud2.setdata();,stud1.display();,stud2.display();,return 0;,1.2,最简单的,C+,程序,类,一个类由一批数据以及对其操作的函数组成,称为数据成员和成员函数,成员可以为公有或私有,类体现了封装性和信息隐蔽,对象,具有“类“特征的变量,对象成员的引用:与结构体成员的引用类似,1.3 C+,对,C,的扩充,1.3.1 C+,的输入输出,1.3.2,用,const,定义常变量,1.3.3,函数原型声明,1.3.4,函数的重载,1.3.5,函数模板,1.3.6,有默认参数的函数,1.3.7,变量的引用,1.3.8,内置函数,1.3.9,作用域运算符,1.3.10,字符串变量,1.3.11,动态分配,/,撤销内存的运算符,new,和,delete,1.3.12,小结,1.3.1 C+,的输入输出,使用,C,中的函数,printf,,,scanf,头文件:,stdio.h,使用输入输出流,cin,,,cout,不需指定数据类型,头文件:,iostream,格式控制:第七章讲述,1.3.2,用,const,定义常变量,符号常量,#define PI 3.14,字符置换,不是变量,没有类型,不占用内存,常变量,定义格式:,const,数据类型 变量,=,常量;,例:,const float PI=3.14,;,PI,作为变量使用,不可重新赋值,1.3.3,函数原型声明,函数声明,函数类型 函数名(参数列表);,例,int,max(int,x,int,y);,int,max(int,int,);,1.3.4,函数的重载,允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同,即一物多用,例,int,max1(int a,,,int,b,int,c);/,求,3,个整数中的最大者,double max2(double a,,,double b,,,double c);,/,求,3,个双精度数中最大者,long max3(long a,,,long b,,,long c);/,求,3,个长整数中的最大者,1.3.4,函数的重载,例,1.6,求,3,个数中最大的数(分别考虑整数,双精度数,长整数的情况)。,#include,using namespace std;,int,main(),int,max(int,a,int,b,int,c);/,函数声明,double,max(double,a,double,b,double,c);/,函数声明,long,max(long,a,long,b,long,c);/,函数声明,int,i1,i2,i3,i;,double d1,d2,d3,d;,long g1,g2,g3,g;,cin,i1i2i3;/,输入,3,个整数,i=max(i1,i2,i3);/,求,3,个整数中的最大者,cout,i_max,=id1d2d3;/,输入,3,个双精度数,d=max(d1,d2,d3);/,求,3,个双精度数中的最大者,cout,d_max,=dg1g2g3;/,输入,3,个长整数,g=max(g1,g2,g3);/,求,3,个长整数中的最大者,cout,g_max,=ga)a=b;,if(c,a)a=c;,return a;,double,max(double,a,double,b,double,c),if(b,a)a=b;,if(c,a)a=c;,return a;,long,max(long,a,long,b,long,c),if(b,a)a=b;,if(c,a)a=c;,return a;,1.3.4,函数的重载,1.3.4,函数的重载,例,1.7,求两个整数或三个整数的最大数。,#include,using namespace std;,int,main(),int,max(int,a,int,b,int,c);,int,max(int,a,int,b);,int,a=8,b=-12,c=27;,cout,max(a,b,c,)=,max(a,b,c,),endl,;,cout,max(a,b,)=,max(a,b,)a)a=b;,if(c,a)a=c;,return a;,int,max(int,a,int,b),if(a,b)return a;,else return b;,1.3.4,函数的重载,同名函数的功能应相同或相近,不能只有函数类型不同而参数的个数和类型都相同,重载函数的参数个数,类型或顺序必须至少有一种不同,函数返回值类型可相同也可不相同,1.3.5,函数模板,函数模板即通用函数,不指定函数类型和形参类型,函数体相同,例,1.8,改写例,1.6,。,#include,using namespace std;,template /,模板声明,其中,T,为类型参数,T,max(T,a,T,b,T,c)/,定义一个通用函数,用,T,作虚拟的类型名,if(b,a)a=b;,if(c,a)a=c;,return a;,int,main(),int,i1=185,i2=-76,i3=567,i;,double d1=56.87,d2=90.23,d3=-3214.78,d;,long g1=67854,g2=-912456,g3=673456,g;,i=max(i1,i2,i3);/,调用模板函数,此时,T,被,int,取代,d=max(d1,d2,d3);/,调用模板函数,此时,T,被,double,取代,g=max(g1,g2,g3);/,调用模板函数,此时,T,被,long,取代,cout,i_max,=i,endl,;,cout,f_max,=f,endl,;,cout,g_max,=g,endl,;,return 0;,1.3.5,函数模板,定义模板的一般形式,template,通用函数定义,template,通用函数定义,类型参数允许有多个,适用于函数体相同,参数个数相同而类型不同,1.3.6,有默认参数的函数,一般情况下,在函数调用时形参从实参那里取得值,因此实参的个数应与形参相同。,如果多次调用同一函数时用同样的实参,可以给形参指定一个默认值,则调用时不用提供实参,float,area(float,r=6.5);,area();/,相当于,area(6.5);,如果不想使形参取此默认值,则通过实参另行指定,area(7.5);/,形参得到的值为,7.5,,而不是,6.5,1.3.6,有默认参数的函数,有多个形参,可以使每个形参有一个默认值,也可以只对一部分形参指定默认值,另一部分形参不指定默认值。,例 有一个求圆柱体体积的函数,形参,h,代表圆柱体的高,,r,为圆柱体半径。函数原型如下:,float,volume(float,h,float,r=12.5);,volume(45.6);/,相当于,volume(45.6,12.5),volume(34.2,10.4),;,/h,的值为,34.2,,,r,的值为,10.4,1.3.6,有默认参数的函数,实参与形参的结合是从左至右顺序进行的。因此指定,默认值的参数必须放在形参表列中的最右端,,否则出错。,void f1(float a,,,int,b=0,,,int c,,,char d=a);,不正确,void f2(float a,,,int,c,,,int,b=0,char d=a);,正确,f2(3.5,5,3,x)/,形参的值全部从实参得到,f2(3.5,5,3)/,最后一个形参的值取默认值,a,f2(3.5,5)/,最后两个形参的值取默认值,,b=0,d=a,1.3.6,有默认参数的函数,例,求,2,个或,3,个正整数中的最大数。,#include,using namespace std;,int,main(),int,max(int,a,int,b,int,c=0);/,函数声明,形参,c,有默认值,int,a,b,c,;,cin,abc;,cout,max(a,b,c,)=,max(a,b,c,),endl,;/,输出,3,个数中的最大者,cout,max(a,b,)=,max(a,b,)a)a=b;,if(c,a)a=c;,return a;,1.3.6,有默认参数的函数,注意事项,如果函数的定义在函数调用之前,则应在函数定义中给出默认值。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值,一个函数不能既作为重载函数,又作为有默认参数的函数。因为当调用函数时如果少写一个参数,系统无法判定是利用重载函数还是利用默认参数的函数,出现二义性,系统无法执行,1.3.7,变量的引用,引用即别名,定义格式:类型,&,引用名,=,变量;,例:,int,a,;,int,&b=a,;,说明,b,与,a,等价,表示同一变量,声明引用时必须进行初始化,b,不新建内存,1.3.7,变量的引用,说明,区分引用的声明和取地址操作,引用的初始化可使用变量或者另一引用,引用在初始化后不能被重新声明,引用可以作为函数参数使用(主要作用),1.3.7,变量的引用,参数传递,变量名作实参,值传递,传递变量指针,传递地址,传送变量的别名,传递地址,优点:无需设置指针变量,1.3.7,变量的引用,注意,不能建立,void,类型的引用,不能建立数组的引用,可以将引用的地址赋给指针,等价于将原变量地址给指针,可以建立指针变量的引用,可以使用,const,限定引用,可以用常量或表达式对引用初始化,1.3.8,内置函数,又称内联函数,关键词:,inline,调用时直接使用函数体代码代替调用语句,可以节省运行时间,一般用于规模小而使用频繁的函数,1.3.9,作用域运算符,作用域运算符,:,用于引用其他作用域中的变量,使其生效,float a=3.14;,void main(),int,a=5;,cout,a,endl,;,cout,:a string1;,cout,=,=,实现函数,strcmp,()的功能,1.3.10,字符串变量,可以使用,string,定义数组,例,string name,5,;,string name,5,=,Zhang,Li,Fun,Wang,Tan,;,1.3.10,字符串变量,例,1,输入,3,个字符串,要求将字符串按从小到大的顺序输出。,提示:参考,3,个整数的排序,1.3.10,字符串变量,例,2,一个班有,n,个学生,需要把每个学生的简单材料,(,姓名和学号,),输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。当输入一个姓名后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出“本班无此人”。,1.3.10,字符串变量,例,2,思考,程序第,3,行定义全局变量时,数组的大小不指定为,50,,而用变量,n,,,即,string name,n,num,n,;n,在运行时输入,行不行?为什么?,search,函数,for,循环中最后有一个,break,语句,它起什么作用?不要行不行?,如果不使用全局变量,把变量,n,和数组,name,,,num,都作为局部变量这样行不行?,1.3.11 new,和,delete,new,运算符使用的一般格式,new,类型,初值,分配数组空间时不能指定初值,分配不成功返回,NULL,new,int,;,new int(100);,new char10;,new int54;,float*p=new float(3.14159);,1.3.11 new,和,delete,delete,运算符使用的一般格式,delete ,指针变量,例,delete p,;,delete p,;,
展开阅读全文