




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
14.1C+的特点14.2最简单的C+程序14.3C+的输入输出14.4函数的重载14.5带缺省参数的函数14.6变量的引用类型514.7内置函数14.8作用域运算符14.9动态分配/撤销内存的运算符new和delete14.10小结,第14章C+对C的扩充,14.1C+的特点C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用C语言较得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。C程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。,为了解决软件设计危机,在20世纪80年代提出了面向对象的程序设计(Object-Orientedprogramming,简称OOP),在这种形势下,C+应运而生。C+是由贝尔实验室的BjarneStroustrup博士及其同事在C语言的基础上开发成功的。C+保留了C语言原有的所有优点,增加了面向对象的机制。C+与C完全兼容,用C语言写的程序可以不加修改地用于C+。从C+名字可以看出它是对C的扩充,是C的超集。它既可以用于结构化程序设计,又可用于面向对象的程序设计,因此它是一个功能强大的混合型的程序设计语言。,使用C+必须事先安装C+编译系统,在DOS系统下可以使用TurboC+或BorlandC+。C源程序的后缀一般为.c,而C+的后缀一般为.cpp(为Cplusplus的缩写,即C+)。在BorlandC+开发环境中,既可以使用C语言,也可以使用C+语言。它有两个编译系统,根据源程序文件名的后缀是.c还是.cpp来决定使用哪个编译系统。,如上所述,面向对象程序设计方法主要是解决大型软件的设计问题。只有编写过大型程序的人才会体会到C的不足和C+的优点。C+是一种大型语言,其功能、概念和语法规定都比较复杂,要深入掌握它需要花较多的时间,尤其是需要有较丰富的实践经验。用C+编程的主要是软件专业人员。学校里一般专业的程序设计课程任务主要是进行程序设计的基本训练,因此,我们认为当前对大多数学生来说,应先掌握好C语言程序设计。有了C语言的基础在需要时再学习C+不会太困难。为了使读者对C+有初步的了解,以便为今后学习C+打下基础,我们在进行本书的修订时特地增加了第14章和第15章,介绍C+的初步知识。,C+对C的“增强”,表现在两个方面:(1)在原来面向过程的机制基础上,对C语言的功能做了不少扩充。(2)增加了面向对象的机制。本章介绍C+对C功能的扩充。第15章介绍有关面向对象的内容。,14.2最简单的C+程序例14.1输出一行字符。#include#include/*本程序的作用是输出一行字符*/voidmain()printf(Thisisac+program.n);coutThisisac+program.n;/本行输出一行字符本程序和以前见过的C程序有什么不同?,(1)在C+程序中一般习惯在主函数main前面加了一个类型声明符void,表示main函数没有返回值。(2)除了可以用/*/形式的注释行外,还允许使用以/开头的注释。从程序最后一行中可以看到:以/开头的注释可以不单独占一行,它出现在语句之后。编译系统将/以后到本行末尾的所有字符都作为注释。应注意:它是单行注释,不能跨行。C+的程序设计人员多愿意用这种注释方式,它比较灵活方便。(3)除了可以用printf函数输出信息外,还可以用cout进行输出。cout要与运算符配合使用,程序中cout的作用是将运算符右侧的内容送到输出设备中输出。,(4)使用cout需要用到头文件iostream.h,在程序的第一行用#include命令将该头文件“包含”进来。程序运行时输出:Thisisac+program.Thisisac+program.可以看到程序中最后两个语句的作用相同,都是输出Thisisac+program.。,14.3C+的输入输出在C语言中文件不是由记录构成的。对文件的存取是以字节为单位的,对一个C文件的输入和输出是一个字节流。输入和输出的数据流的开始和结束只受程序控制而不受物理符号(如回车换行符)的控制。这种文件称为流式文件。在输入操作中,字节从输入设备流向内存,在输出操作中,字节从内存流向输出设备。C+为了方便使用,除了可以利用printf和scanf函数进行输出和输入外,还增加了标准输入输出流cout和cin。cout是由c和out两个单词组成的,代表C+的输出流,cin是由c和in两个单词组成的,代表C+的输入流。它们是在头文件iostream.h中定义的。在键盘和显示器上的输入输出称为标准输入输出,标准流是不需要打开和关闭文件即可直接操作的流式文件。,C+预定义的标准流如表14.1所示。表14.1,14.3.1用cout进行输出cout必须和输出运算符一起使用。在这里不作为位运算的左移运算符,而是起插入的作用,例如:coutHello!n;的作用是将字符串“Hello!n”插入到输出流cout中,也就是输出在标准输出设备上。也可以不用n控制换行,在头文件iostream.h中定义了控制符endl代表回车换行操作,作用与n相同。endl的含义是endofline,表示结束一行。可以在一个输出语句中使用多个运算符将多个输出项插入到输出流cout中,运算符的结合方向为自左向右,因此各输出项按自左向右顺序插入到输出流中。例如:,for(i=1;i=3;i+)coutcount=iendl;输出结果为:count=1count=2count=3注意:每输出一项要用一个符号。不能写成couta,b,c,A;形式。用cout和可以输出任何类型的数据,如:floata=3.45;intb=5;charc=A;couta=a,b=b,c=cendl;,输出结果为a=3.45,b=5,c=A可以看到在输出时并未指定数据的类型(如实型、整型),系统会自动按数据的类型进行输出。这比用printf函数方便,在printf函数中要指定输出格式符(如%d,%f,%c等)。如果要指定输出所占的列数,可以用控制符setw设置(注意:若使用setw,必须包含头文件iomanip.h),如setw(5)的作用是为其后面一个输出项预留5列,如输出项的长度不足5列则数据向右对齐,若超过5列则按实际长度输出。如将上面的输出语句改为:couta=setw(6)aendlb=setw(6)bendlc=setw(6)cendl;,输出结果为a=3.45b=5c=A在C+中将数据送到输出流称为“插入”(inserting),或“放到”(putting)。运算符从输入设备键盘取得数据送到输入流cin中,然后送到内存。在C+中,这种输入操作称为“提取”(extracting)或“得到”(getting)。常称为“提取运算符”。cin要与配合使用。例如:inta;floatb;cinab;/输入一个整数和一个实数。注意不要写成cina,b;可以从键盘输入:2032.45(数据间以空格分隔),a和b分别获得值20和32.45。用cin和输入数据同样不需要在本语句中指定数据类型(用scanf函数输入时要根据数据类型指定输入格式符,如%d,%c等)。例14.2cin与cout一起使用。#includevoidmain()coutname;cinage;coutyournameisnameendl;coutyourageisagea)a=b;if(ca)a=c;returna;floatmax(floata,floatb,floatc)/求3个实数中的最大者if(ba)a=b;if(ca)a=c;returna;longmax(longa,longb,longc)/求3个长整数中的最大者if(ba)a=b;if(ca)a=c;returna;voidmain()inta,b,c;floatd,e,f;longg,h,i;cinabc;cindef;cinghi;intm;m=max(a,b,c);/函数值为整型coutmax-i=mendl;floatn;n=max(d,e,f);/函数值为实型,coutmax-f=nendl;longintp;p=max(g,h,i);/函数值为长整型coutmax-l=pa)a=c;returna;intmax(inta,intb)/求两个整数中的最大者if(ab)returna;elsereturnb;voidmain()inta=7,b=-4,c=9;coutmax(a,b,c)endl;/输出3个整数中的最大者coutmax(a,b)endl;/输出两个整数中的最大者运行情况如下:97,两次调用max函数的参数个数不同,系统会根据参数的个数找到与之匹配的函数并调用它。参数的个数和类型可以都不同。应当注意:重载函数的参数个数或类型必须至少有一者不同,函数返回值类型可以相同也可以不同。但不允许参数个数和类型都相同而只有返回值类型不同,因为系统无法从函数的调用形式上判断哪一个函数与之匹配。,14.5带缺省参数的函数一般情况下,实参个数应与形参个数相同。C+允许实参个数与形参个数不同。办法是在形参表列中对一个或几个形参指定缺省值(或称默认值)。例如某一函数的首部可用如下形式:voidfun(inta,intb,intc=100)在调用此函数时如写成fun(2,4,6),则形参a,b,c的值分别为2,4,6(这是与过去一样的)。如果写成fun(2,4),即少写了最后一个参数,由于在函数定义时已指定了c的缺省值为100,因此a,b,c的值分别为2,4,100。请注意:赋予缺省值的参数必须放在形参表列中的最右端。例如:voidf1(floata,intb,intc=0,chard=a)(正确)voidf2(floata,intc=0,chard=a,intb)(不正确),利用这一特性,可以使函数的使用更加灵活。例如例14.4求两个数或3个数中的最大数。也可以不用重载函数,而将函数max的首行写成intmax(inta,intb,intc=-32768)如果只想从两个数中找大者,则可以在调用时写成max(100,675),c的值自动取-32768,由于-32768是最小整数,因此从100,675,-32768中选大者和从100,675中选大者的结果是一样的。注意:不要同时使用重载函数和缺省参数的函数,因为当调用函数时少写一个参数,系统无法判定是利用重载函数还是利用缺省参数的函数,会发生错误。,14.6变量的引用类型14.6.1引用的概念“引用”(reference)是C+的一种新的变量类型,是对C的一个重要扩充。它的作用是为一个变量起一个别名。假如有一个变量a,想给它起一个别名b,可以这样写:inta;int这就声明了b是a的“引用”,即a的别名。经过这样的声明后,使用a或b的作用相同,都代表同一变量。注意:在上述声明中,int(企图使b变成a2的引用(别名)是不行的),14.6.2引用的简单使用通过下面的例子可以了解引用的简单使用。例14.5了解引用和变量的关系。#include#includevoidmain()inta=10;int,a的值开始为10,b是a的引用,它的值当然也应该是10,当a的值变为100(a*a的值)时,b的值也随之变为100。在输出a和b的值后,b的值变为20,显然a的值也应为20(见图14.1)。运行记录如下:1001002020图14.1,14.6.3引用作为函数参数有了变量名,为什么还需要一个别名呢?C+之所以增加“引用”,主要是把它作为函数参数,以扩充函数传递数据的功能。在C语言中,函数的参数传递有以下两种情况。(1)将变量名作为实参。这时传给形参的是变量的值。传递是单向的,在执行函数期间形参值发生变化并不传回给实参,因为在调用函数时,形参和实参不是同一个存储单元。下面的程序无法实现两个变量的值互换。,例14.6错误的程序。#includevoidswap(inta,intb)inttemp;temp=a;a=b;b=temp;/实现a和b的值互换voidmain()inti=3,j=5;swap(i,j);couti,ja)a=c;returna;voidmain()inti=7,j=10,k=25,m;m=max(i,j,k);coutmax=mi)i=k;m=i;内置函数与宏替换有些相似,但不完全相同。宏替换是在编译前由预处理程序进行预处理,它只作简单的字符替换而不作语法检查。而内置函数是在编译时处理的,编译程序能识别内置函数,对它进行语法检查。有些问题既可以用宏来处理,也可以用内置函数处理,显然,内置函数优于宏替换,它不会出现宏替换中可能产生的副作用。,使用内置函数可以节省运行时间,但却增加了目标程序的长度。假设要调用10次max函数,则在编译时先后10次将max的代码复制并插入main函数,大大增加了main函数的长度。因此只用于规模很小而使用频繁的函数,可大大提高运行速度。,14.8作用域运算符每一个变量都有其有效的作用域,只能在变量的作用域内使用该变量,不能直接使用其他作用域中的变量。例如:#includefloata=13.5;voidmain()inta=5;couta;,程序中有两个a变量:一个是全局变量a,实型;另一个是main函数中的整型变量a,它是在main函数中有效的局部变量。根据规定,在main函数中局部变量将屏蔽全局变量。因此用cout输出的将是局部变量a的值5,而不是实型变量的值13.5。如果想输出全局实型变量的值,有什么办法呢?C+提供作用域运算符,它能指定所需要的作用域。可以把main函数改为:voidmain()inta=5;coutaendl;coutanum=10123;p-sex=M;deletep;,先声明了一个结构体类型Student,定义一个指向它的指针变量p,用new开辟一段空间以存放一个Student类型的变量,空间的大小由系统根据Student自动算出,不必用户指定。执行new返回一个指向Student类型数据的指针,存放在p中。然后对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 非小细胞肺癌耐药机制
- 护理查房胆囊炎术后护理
- 高教版中职英语基础模块第七单元复习测试卷含答案详解
- 新型PVC-TPE耐低温冲击电缆-征求意见稿
- 班主任工作经验交流78
- 肺部楔形切除术后护理
- bim建模技术应用考试题库及答案
- 肝病的治疗与养护
- windows7系统更换教程
- 呼吸康复护理课件
- 院感各类应急预案培训
- 2024年四川省资中县事业单位公开招聘医疗卫生岗考前冲刺模拟带答案
- 2025年福建省龙岩市中考数学二检试卷
- 2025-2030年全球商业WiFi行业市场调研及投资前景预测报告
- 生猪屠宰管理条例解读与应用
- 结肠癌影像诊断与分期课件
- 生物化学教学研究知识图谱可视化分析
- 小学老师心理健康教育培训
- 正规监控合同协议
- 高中生物2015-2024年10年高考真题专题分类汇编-专题6光合作用考点1捕获光能的色素与结构
- 广东高考:化学必考知识点归纳
评论
0/150
提交评论