CC程序设计基础作者李凤云第14章节C对C的扩充课案

上传人:E**** 文档编号:91225455 上传时间:2019-06-26 格式:PPT 页数:32 大小:66.50KB
返回 下载 相关 举报
CC程序设计基础作者李凤云第14章节C对C的扩充课案_第1页
第1页 / 共32页
CC程序设计基础作者李凤云第14章节C对C的扩充课案_第2页
第2页 / 共32页
CC程序设计基础作者李凤云第14章节C对C的扩充课案_第3页
第3页 / 共32页
CC程序设计基础作者李凤云第14章节C对C的扩充课案_第4页
第4页 / 共32页
CC程序设计基础作者李凤云第14章节C对C的扩充课案_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《CC程序设计基础作者李凤云第14章节C对C的扩充课案》由会员分享,可在线阅读,更多相关《CC程序设计基础作者李凤云第14章节C对C的扩充课案(32页珍藏版)》请在金锄头文库上搜索。

1、第14章 C+对C的扩充,C+与C语言的关系:C语言是C+的一个子集,C+包含了C语言的全部内容。 1、C+保持与C语言的兼容,现有的许多C代码不经修改就可以为C+所用。 2、C+对C语言作了很多改进: 增加了一些新的运算符,使得C+应用起来更加方便。 改进了类型系统,增加了安全性。 引进了“引用”概念,使用引用作函数参数带来了很大方便。 允许函数重载,允许设置缺省参数,这些措施提高了编程的灵活性,减少冗余性。又引进了内联函数的概念,提高了程序的效率。 对变量说明更加灵活了。可以根据需要随时对变量进行说明。,14.1 C+概述,14.2 C+程序结构,例14.1 /This is a C+ p

2、rogram. #include void main( ) double x,y; coutxy; double z=x+y; cout“x+y=“zendl; 运行结果: Enter two float numbers:3.4 5.5 x+y=8.9,说明: 1)C+允许的新的注释形式以/开始,直到本行的末尾的文字都是注释。 2)iostream.h是一个头文件,定义了标准的输入和输出操作,包括对cin和cout的说明。 3)cout称为标准输出流,表示标准输出设备,一般指屏幕。cin表示标准输入设备,一般指键盘。 4)是重载的运算符,将键盘中输入的一个数,送到它右边的变量中保存起来。 5)

3、endl表示输出新行。 C+程序的源文件约定使用扩展名.cpp或.cxx,头文件约定使用扩展名.h 或.hpp或.hxx。编辑好的源程序经过C+编译器编译成目标文件,其扩展名是.obj,再经过C+连接器,将目标文件与库文件中的一些代码连接起来,生成一个可执行文件。程序被运行后,一般在屏幕上显示出运行结果。,14.3 C+的I/O流cin和cout,在C+中提供了新的输入/输出方式。其主要目标是建立一个类型安全、扩充性好的输入/输出系统。C+的输入/输出流库是建立在流的概念上。流类似于文件,可以把流看成是一个无限长的字符序列,它可以被顺序访问。从流中获取数据的操作称为提取操作。向流中添加数据的操

4、作称为插入操作。C+的输入/输出流库不是语言的一部分,而是作为一个独立的函数库提供的。因此,在使用时需要包含相应的头文件“iostream.h”。输出操作被认为是插入过程,由重载的插入符“”来实现。,最一般的屏幕输出是将插入符作用在流类的对象cout上。例如: #include main() int a=5,b=12; cout int a,b; cinab; coutabendl; 提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是获得输入值的变量或对象。,14.4函数的重载,函数重载(overloading)是指一个函数可以和同一作用域中的其他函数具有相同的名字,即同一个函数名可以

5、对应着多个不同的函数实现。C+中允许两个或多个函数共用同一个函数名,但这些函数各自拥有可用于区分和唯一识别它们的参数表。它们之间有的是通过参数表中某个参数的类型不同来区别,有的是通过参数个数的不同加以区别。,1、参数类型上不同的重载函数 例14.2给函数名add()定义多个函数实现,该函数的功能是求和。其中,一个函数实现求两个整型数之和,另一个函数实现求两个浮点数之和。每种实现对应着一个函数体,这些函数的名字相同,但是函数的参数的类型不同。这就是函数重载的概念。程序如下: #include int add(int ,int); double add(double,double); void m

6、ain( ) coutadd(3,6)endl; coutadd(4.6,9.0)endl; int add(int a, int b) return a+b; double add(double a, double b) return a+b; 程序运行结果如下: 9 13.6,2、参数个数上不同的重载函数 例14.3找出几个int型数中的最大者。 #include int max(int a, int b); int max(int a, int b, int c); void main( ) coutb?a:b; int max(int a,int b, int c) int t; if

7、 (a=b) t=a; else t=b; if (ct) t=c; return t; ,函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码,即采用哪个函数实现。确定函数实现时,要求从函数参数的个数和类型上来区分。也就是说,进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。否则,将无法实现重载。 使用函数重载主要是为了处理一组完成相同或相似功能的任务,但处理的数据个数或类型不同,这样,编程时可以不必费力的给它们起名和记忆。 如果两个函数参数个数和类型完全相同,仅仅是返回值不同,它们不是重载的函数。程序中出现这样两个函数,编译时将出错。 函数重载可以使某些具有相似

8、功能的函数聚集起来共同使用一个通常具有特定语义的函数名,但是当聚集起来的函数并不执行相似的操作时,就不应采用函数重载。,14.5 引用,引用也是一种特殊类型的变量,它通常被认为是另一个变量的别名。定义引用变量的格式: 类型 这时,n具有被m引用的变量i的值,即10。,例14.4: #include void main() int i=5; int 运行结果: add_i=63f974 add_ri=63f974 i=5 ri=5 i=15 ri=15 i=20 ri=20,从运行结果可以看出变量i 和引用ri的地址都是0x63f974,即这两个名字都标识的是地址为0x63f974的存储空间。所

9、以不论对i改写,还是对ri的改写,都是操作在同一个程序实体上,即变量i和引用ri所指称的值都是相同的。,例14.5: #include void main() int i=5; int *pi= ,程序运行结果: add_pi=63f970 add_rpi=63f970 i=5 i=10 i=20 由程序的运行结果可见,指针变量pi和引用rpi的地址是相同的(0x63f970),也就是说,用于存储指针的地址0x63f970具有两个字句pi和rpi。不论是对变量i操作,还是对pi所指对象的操作以及对rpi所指对象的操作,都是对同一个程序实体的操作。,C+使用引用的主要地方是建立函数变参。将引用作

10、为函数的形参时,改变形参的值会影响实参的值。C+使用引用参数另一个目的是为了效率。如果函数的参数是类或结构类型,参数传递时将拷贝整个形参。使用引用可以只传递指向形参的指针。引用调用是C+中的一种函数调用方式,C语言中没有这种调用方式。 例14.6:函数参数是引用类型 #include void swap(int ,运算结果: a=4 b=2 使用引用作函数形参时,调用函数的实参要用变量名,将实参变量名赋给形参的引用,相当于在被调用函数中使用了实参的别名。于是在被调用函数中,对引用的改变,实质上就是直接地通过引用来改变实参的变量值。而且这种调用起到传址调用的作用,但它又比传址调用更方便、更直接。

11、因此,在C+中常常使用引用作函数形参来实现在被调用函数中改变调用函数的实参值。 使用引用作形参但不改变实参值,可以如下定义函数原型: int myFunc(const int 不能对param赋值,否则编译出错。,引用可以作为函数的返回值。返回引用的函数可以作为左值,即它可以出现在赋值运算符的左边。 例14.7: #include int a =1,3,5,7,9; int 在实现返回引用的函数时,注意不要返回对该函数内的自动变量的引用,因为以后使用引用时,它所指向的变量已不存在。,14.6内联函数,引入内联函数的目的是为了解决程序中函数调用的效率问题。程序执行过程中,每调用一次函数,就要在调

12、用与返回过程中付出一定的时间与空间代价用于处理现场。当函数较小又反复使用时,处理现场的开销比重会急剧增大。若把函数体嵌入函数调用处,便可以大大提高运行速度,节省开销。内联函数就可以自动实现这一功能。 使用C+中新的关键字inline说明的函数称为内联函数。编译器在遇到对内联函数调用时,将尽可能的用内联函数的函数体替换函数调用的表达式。因此会增加目标程序代码量,它是以目标代码的增加为代价来换取时间的节省。使用内联函数可以加快程序执行的速度。,例14.8:编程求110中各个数的平方。 #include inline int power_int(int x) return (x)*(x); void

13、 main() int i; for(i=1;i=10;i+) int p=power_int(i); couti“*“i“=“pendl; 在使用内联函数时,应注意如下几点: 1、在内联函数内不允许用循环语句和开关语句。 2、内联函数的定义必须出现在内联函数第一次被调用之前。 3、后面讲到的类结构中所有在类说明内部定义的函数都是内联函数。,14.7函数参数的缺省值,正确的缺省参数说明: void fun1(int x,int y=0,int z=0); void fun2(int x,int y=0); C+允许定义或说明函数时为一个或多个形参指定缺省值。缺省参数的说明必须在形参表的最右边开

14、始,并且中间没有间隔的非缺省参数说明。缺省参数只能定义一次,如果在函数原型中已经指定了缺省参数,那么在函数定义时不能再次说明。 如果在函数调用时指定了形参对应的实参,则形参使用实参的值;如果未指定相应的实参,则形参使用缺省值。例如有如下的函数调用表达式: fun1(10); 它与下列调用表达式是等价的: fun1(10,0,0);,例14.9: #include void fun(int a=1,int b=3,int c=5) cout“a=“a“,“b=“b“,“c=“cendl; void main( ) fun( ); fun(7); fun(7,9); fun(7,9,11); co

15、ut“OK!“; 执行该程序,输出如下结果: a=1,b=3,c=5 a=7,b=3,c=5 a=7,b=9,c=5 a=7,b=9,c=11 OK! 该程序中在函数的定义时设置了参数的缺省值,而在调用该函数时,有的无实参,有的实参数目不足,有的实参数目与形参相等,分若干不同情况来说明缺省值的使用。,例14.10:分析下列程序的输出结果: #include int m(8); /*等价于:int m=8; */ int add_int(int x,int y=7,int z=m); void main( ) int a(5),b(15),c(20); int s=add_int(a,b); c

16、outsendl; int add_int(int x,int y,int z) return x+y+z; 该程序中,在说明函数add_int()时,给函数参数设置了缺省值,而其中一个参数的值被设置为一个已知变量(m)的值。 请读者自己分析该程序的输出结果。,14. 8作用域运算符,:是C+定义的一个新的运算符,称为作用域运算符。使用作用域运算符可以访问当前作用域外部的标识符。当:作为单目运算符时,它的右操作数是一个标识符,它限定访问全局作用域范围内的该标识符。当:是双目运算符时,它的左操作数是类名,右操作数是类的成员。它限定访问指定类的某个成员。:运算符最有用的地方是在派生类中访问基类的成员。尤其是当派生类定义的成员名字与基类中成员名字相同时(即派生类的成员名字覆盖基类的成员名字时)。 例14.11: int a, b;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号