第2章-从C语言向C++过渡.ppt
《第2章-从C语言向C++过渡.ppt》由会员分享,可在线阅读,更多相关《第2章-从C语言向C++过渡.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第二章第二章 从从C语言向语言向C+过渡过渡主讲:宋丽红主讲:宋丽红面向对象程序设计(面向对象程序设计(面向对象程序设计(面向对象程序设计(C+C+)Oriented Object Programming Oriented Object Programming(C+)(C+)2第二章第二章 从从C语言向语言向C+过渡过渡n2-1 C+2-1 C+语言的发展过程语言的发展过程n2-2 2-2 在较小范围内如何将在较小范围内如何将C+C+增强增强C Cn2-3 2-3 在较大范围内如何将在较大范围内如何将C+C+增强增强C C32-1 C+语言的发展过程语言的发展过程n C+C+语言基于语言基于
2、C C,是,是C C的一个超集集合。的一个超集集合。n C+C+继承了继承了C C的全部优点,而且还支持面向对的全部优点,而且还支持面向对象特征。象特征。n C+C+由由BCPLBCPL和和Simula67Simula67的某些灵感而导致产生的某些灵感而导致产生的。的。n 19801980年,年,C+C+由贝尔实验室的由贝尔实验室的BjarneBjarne StroustrupStroustrup创建,被称为带类的创建,被称为带类的C C。n 19941994年,建立年,建立ANSI C+ANSI C+标准。标准。42-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 一、一、I/OI
3、/O流控制流控制n 二、内联函数二、内联函数n 三、函数重载三、函数重载n 四、默认参数的函数四、默认参数的函数n 五、五、newnew和和deletedeleten 六、六、constconst说明符说明符n 七、引用七、引用n 八、程序结构八、程序结构n 九、其他九、其他52-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 2.2.12.2.1 I/O I/O流控制流控制C+C+中输入中输入/输出流(一般叫输出流(一般叫iostreamsiostreams或或streamsstreams)提供了提供了C C的的stdio.hstdio.h库中的所有功能。库中的所有功能。输入输入/
4、输出流用作将具有类型的对象转换成可读的正文,反之亦输出流用作将具有类型的对象转换成可读的正文,反之亦然。流能读写二进制数据。然。流能读写二进制数据。C+C+程序以四个预定义的流开始,它们是:程序以四个预定义的流开始,它们是:cincin标准输入、标准输入、coutcout标标准输出、准输出、cerrcerr标准错、标准错、clogclog缓冲的缓冲的cerrcerr。n 标准输入输出流标准输入输出流 p23 p23 在在iostream.hiostream.h中说明中说明ncoutcout输入流接收变量输入流接收变量ncoutcout“Hello,world!n”a;a;ncoutcout“姓
5、名:?姓名:?”“afc;afc;62-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn2.2.12.2.1 I/O I/O流控制流控制n2 2、使用控制符使用控制符#include#include n注意注意n1 1、输入流能自动跳过空白字符、输入流能自动跳过空白字符n2 2、字符串输入避免溢出,可采取以下方法:、字符串输入避免溢出,可采取以下方法:char arraySIZE;char arraySIZE;cin.width(sizeof(arraycin.width(sizeof(array););cincinarray;array;72-2 在较小范围内如何将在较小范围内如何将
6、C+增强增强Cn 2.2.22.2.2 内联函数内联函数使用关键字使用关键字inlineinline说明的函数是内联函数。作用相当于带参数的宏。说明的函数是内联函数。作用相当于带参数的宏。n 使用内联函数的必要性使用内联函数的必要性内联函数增加了代码空间,但减少了执行时间(函数调用开销)内联函数增加了代码空间,但减少了执行时间(函数调用开销)#include#include void main()void main()char c;char c;intint isnumber(charisnumber(char););coutcout”Enter a character:”;c;c;if(is
7、number(cif(isnumber(c)coutcout”You entered a digit.”You entered a digit.”else else coutcout”You entered a non-digit.”=0&c=0&c=0&c=0&c=9)?1:0)表达式替换的方法。但是,手工替表达式替换的方法。但是,手工替换很烦琐,最好让编译程序去做。换很烦琐,最好让编译程序去做。n 内联函数是程序行的扩展,主要是解决程序的运行效率。内联函数是程序行的扩展,主要是解决程序的运行效率。82-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 内联函数的使用(内联函数的使用
8、(1 1)n在函数声明和定义的最前面加关键字在函数声明和定义的最前面加关键字inlineinline在在函数声明函数声明时必须有时必须有inlineinline,定义时可有可无。定义时可有可无。#include#include void main()void main()char c;char c;inlineinline intint isnumber(charisnumber(char););inline inline intint isnumber(charisnumber(char c)c)/或用或用intint isnumber(charisnumber(char c)c)retur
9、n(c=0&c=0&c=9)?1:0;92-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 内联函数的使用(内联函数的使用(2 2)n 内联函数必须在调用之前声明或定义。因为内联内联函数必须在调用之前声明或定义。因为内联函数的代码必须在被替换之前已经生成被替换的代函数的代码必须在被替换之前已经生成被替换的代码。码。#include#include inline inline intint isnumber(charisnumber(char c)c)return(c=0&c=0&c=9)?1:0;void main()void main()char c;char c;/inline
10、/inline intint isnumber(charisnumber(char););102-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn内联函数的函数体限制内联函数的函数体限制n内联函数中不能含有复杂的结构控制语句,否则,内联函数中不能含有复杂的结构控制语句,否则,编译时将该函数视同普通函数那样产生函数调用编译时将该函数视同普通函数那样产生函数调用代码。代码。n递归函数是不能被用来做内联函数的。递归函数是不能被用来做内联函数的。n内联函数只适合于只有内联函数只适合于只有1 15 5行的小函数,而且不行的小函数,而且不能频繁地被调用。能频繁地被调用。112-2 在较小范围内如何
11、将在较小范围内如何将C+增强增强Cn 2.2.32.2.3 函数重载函数重载n 使用重载函数的必要性使用重载函数的必要性n 在不同类型上作相同运算而又用相同名字的情在不同类型上作相同运算而又用相同名字的情况,称为重载。况,称为重载。int add(int x,int y)int add(int x,int y)int temp;temp=x+y;int temp;temp=x+y;return temp;return temp;double add(double x,double y)double add(double x,double y)double temp;temp=x+y;doubl
12、e temp;temp=x+y;return temp;return temp;main()main()int a=4,b=5;double x=12.5,y=75.75;int a=4,b=5;double x=12.5,y=75.75;coutadd(a,b)”t”add(x,y)endl;coutadd(a,b)”t”add(x,y)endl;运行结果为:运行结果为:9 988.2588.25122-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 使用重载函数的必要性使用重载函数的必要性n 使用不同数目的参数使用不同数目的参数#include#include intint mu
13、l(intmul(int x,intx,int y)y)intint temp;temp=x*y;temp;temp=x*y;return temp;return temp;intint mul(intmul(int x,intx,int y,inty,int z)z)intint temp;temp=x*y*z;temp;temp=x*y*z;return temp;return temp;main()main()intint a=5,b=10,c=20;a=5,b=10,c=20;coutcoutmul(a,bmul(a,b)”n”)”n”mul(a,b,cmul(a,b,c)a=5,b=
14、10,c=3fun(5,10);-a=5,b=10,c=3n 默认参数与函数重载默认参数与函数重载默认参数可以将一系列重载函数合成一个为函数,默认参数可以将一系列重载函数合成一个为函数,但由于必须从右至左定义,并向左匹配参数,因但由于必须从右至左定义,并向左匹配参数,因此它没有重载函数灵活,而且数据类型也有限制。此它没有重载函数灵活,而且数据类型也有限制。n 默认值的限定默认值的限定n 默认值可为全局变量、全局常量和函数,即不默认值可为全局变量、全局常量和函数,即不能是局部变量。能是局部变量。162-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 2.2.52.2.5 new new
15、和和deletedeleten 堆内存堆内存动态内存(在运行时申请内动态内存(在运行时申请内存)。存)。用户内存用户内存:代码区、全局数据区、栈区、堆代码区、全局数据区、栈区、堆n newnew和和deletedelete的格式的格式n 创建、销毁一变量:创建、销毁一变量:new new 数据类型数据类型(初始值初始值);delete);delete 指针名;指针名;intint*p;p=new *p;p=new intint;delete p;delete p;n 创建、销毁一数组:创建、销毁一数组:new new 数据类型数据类型 长度长度;deletedelete指针名;指针名;inti
16、nt*p;p=new int30;delete p;*p;p=new int30;delete p;172-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn 说说 明明n newnew类似于函数类似于函数mallocmalloc()(),分配堆内存,但比分配堆内存,但比mallocmalloc()()更简练。更简练。n newnew的操作数为数据类型,它可以带初始化值表或单的操作数为数据类型,它可以带初始化值表或单元个数。元个数。newnew返回一个具有操作数的数据类型的指针。返回一个具有操作数的数据类型的指针。n newnew和和deletedelete是是C+C+专有的操作符,它们
17、不用头文件声专有的操作符,它们不用头文件声明。明。n deletedelete类似于类似于free()free(),释放堆内存。释放堆内存。deletedelete的操作数的操作数是是newnew返回的指针,当返回的是返回的指针,当返回的是newnew分配的数组时,应该分配的数组时,应该带带。deletedata;deletedata;n 由于堆对象的生存期是从创建对象到销毁或程序结束,由于堆对象的生存期是从创建对象到销毁或程序结束,因此,删除不再需要的堆对象是一个必须进行的工作。因此,删除不再需要的堆对象是一个必须进行的工作。182-2 在较小范围内如何将在较小范围内如何将C+增强增强Cn
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 C+ 过渡
限制150内