C ++面向对象程序设计 第六章 常见问题.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C ++面向对象程序设计 第六章 常见问题.ppt》由会员分享,可在线阅读,更多相关《C ++面向对象程序设计 第六章 常见问题.ppt(119页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社主讲教师:陈良银个人主页:http:/ *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社教材:教材:C+面向对象程序设计面向对象程序设计李涛李涛 主编主编游洪跃游洪跃 陈良银陈良银 李琳等编李琳等编高等教育出版社高等教育出版社20062006年年2 2月出版月出版2023/1/22主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社本书本书内容内容 2023/1/23主讲教师
2、:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社提纲动态内存管理技术动态内存管理技术第六章第六章 C+C+常见问题常见问题ARM Vector TableFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x001 13 32 2Const的使用的使用内联函数的使用内联函数的使用使用引用使用引用4 4类型转换类型转换5
3、 5异常处理异常处理6 6命名空间命名空间7 72023/1/24主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社本章将讨论本章将讨论C+中比较常见的一些问题,这部中比较常见的一些问题,这部分问题比较繁琐,但也是分问题比较繁琐,但也是C+中比较核心的问中比较核心的问题。题。比如:比如:动态内存动态内存的使用、的使用、const的使用等。编制的使用等。编制程序时必须涉及这些内容。程序时必须涉及这些内容。内存不就是存放内存不就是存放数据的空间吗?数据的空间吗?2023/1/25主讲教师:四川大学计算机
4、学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.1 内联函数的使用内联函数的使用内联与非内联函数的主要区别就在于内联与非内联函数的主要区别就在于编译时的编译时的处理方式不同处理方式不同。在执行在执行效率和空间效率和空间占用上有差异。占用上有差异。我不喜欢内联函我不喜欢内联函数行吗?数行吗?2023/1/26主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.1.1 内联函数引入的原因内联函数引入的原因 调用函数时,要跳到
5、函数的起始地址去执行,调用函数时,要跳到函数的起始地址去执行,执行完函数的代码后,再返回到调用点继续执执行完函数的代码后,再返回到调用点继续执行。行。这种跳转操作需要这种跳转操作需要保存现场保存现场及返回地址;返回及返回地址;返回时,又需要时,又需要恢复现场恢复现场。函数调用需要一定的函数调用需要一定的时间开销时间开销和和空间开销,空间开销,这这会影响程序的执行效率。会影响程序的执行效率。外联开销外联开销2023/1/27主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社对内联函数,编译器会在程序出
6、现内联函数调对内联函数,编译器会在程序出现内联函数调用的地方用的地方用函数体直接进行替换用函数体直接进行替换。目标程序将目标程序将不存在调用不存在调用问题,也就问题,也就不会产生跳不会产生跳转转的问题,自然就的问题,自然就不存在函数调用所需要的时不存在函数调用所需要的时间和空间开销。间和空间开销。在编译时用函数代码替换到调用处,如果函数在编译时用函数代码替换到调用处,如果函数代码长度比较长,超过了跳转语句所占空间的代码长度比较长,超过了跳转语句所占空间的长度,这自然会增加整个程序的代码量,进而长度,这自然会增加整个程序的代码量,进而增加了空间的开销增加了空间的开销。实质是用空间换时间。实质是用
7、空间换时间。2023/1/28主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.1.2 内联函数的定义内联函数的定义 例例6_1:smain6_1.cpp/1、全局函数定义为内联函数、全局函数定义为内联函数inline double Show1(double dX)return dX*dX;2023/1/29主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社/2、在、在类声明体内实现类声明体内实现的函
8、数不用的函数不用inline关键关键字,自动是内联函数。字,自动是内联函数。double Show2(double dX)constreturn dX*dX;2023/1/210主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社/3、在函数声明处可加可不加、在函数声明处可加可不加inline关键字。关键字。double Show3(double dX)const;/4、但在实现处必须加、但在实现处必须加inline关键字关键字inline double CPerson:Show3(double dX
9、)constreturn dX*dX;2023/1/211主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社内联函数使用时注意以下几点。内联函数使用时注意以下几点。1、在内联函数中、在内联函数中不允许用循环语句、开关语不允许用循环语句、开关语句和递归调用语句句和递归调用语句等。等。2、内联函数的定义必须出现在第一次调用内、内联函数的定义必须出现在第一次调用内联函数之前。联函数之前。3、在类内部定义并实现的成员函数、在类内部定义并实现的成员函数自动自动是内是内联函数,但在类内定义成员函数时,如果使用联
10、函数,但在类内定义成员函数时,如果使用了了for()、while()、do while()、switch()等等语句,该成员函数会语句,该成员函数会自动转为非内联函数自动转为非内联函数。4、内联函数中、内联函数中不能够有静态数据不能够有静态数据。5、内联函数中、内联函数中不能够有数组说明不能够有数组说明。2023/1/212主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.1.3 内联和非内联函数的选择使用内联和非内联函数的选择使用内联函数时间开销的减少,内联函数时间开销的减少,以空间的消耗为代
11、以空间的消耗为代价价,而且,而且执行效率的提高也不是绝对的执行效率的提高也不是绝对的。在决定使用内联函数时要进行适当的取舍。在决定使用内联函数时要进行适当的取舍。不是所有的函数都适合采用内联函数不是所有的函数都适合采用内联函数。构造函数和析构函数常常就不适合内联构造函数和析构函数常常就不适合内联,这是,这是因为构造函数和析构函数在编译时,往往会被因为构造函数和析构函数在编译时,往往会被编译器附加一大堆代码。编译器附加一大堆代码。全部内联可以吗?全部内联可以吗?2023/1/213主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程
12、序设计 主编:李涛 高教出版社看看看看CStudent类的构造函数:类的构造函数:例例6_2:构造函数、析构函数往往不适合作构造函数、析构函数往往不适合作内联内联函数。函数。smain6_2.cpp 构造函数、析构函构造函数、析构函数最好不要内联。数最好不要内联。2023/1/214主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社CStudent()构造函数看起来是构造函数看起来是空的空的,但它可能,但它可能含有相当多的代码(与编译器的设计有关)。含有相当多的代码(与编译器的设计有关)。CStud
13、ent的构造函数,需要构建的构造函数,需要构建4000字节的空字节的空间,并且还需要按照基类的要求初始化这些空间,并且还需要按照基类的要求初始化这些空间,因此它包含了一个复杂的创建过程间,因此它包含了一个复杂的创建过程。构造函数和析构函数最好都在构造函数和析构函数最好都在类内声明,类外类内声明,类外实现实现。一般来说,实际编程时一般来说,实际编程时最好最好是不要内联任何函是不要内联任何函数,除非函数确实很小很简单。数,除非函数确实很小很简单。不要内联任何函数不要内联任何函数2023/1/215主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C
14、+:面向对象程序设计 主编:李涛 高教出版社6.2 const的使用的使用const意味着分配了一块意味着分配了一块不可改变的内存不可改变的内存。用用const定义或说明常类型量时定义或说明常类型量时必须初始化必须初始化。常类型量,也就是常量。常类型量,也就是常量。const更重要的用途则在于更重要的用途则在于说明函数参数以及函说明函数参数以及函数返回类型数返回类型。函数参数函数参数2023/1/216主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社const主要有以下几种用法:主要有以下几种用法
15、:1、const说明值常量。说明值常量。2、const说明指针。说明指针。3、const说明函数参数及其返回值。说明函数参数及其返回值。4、const说明类中的常量和成员函数。说明类中的常量和成员函数。Const与指针与指针2023/1/217主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.2.1 const说明值常量说明值常量 1、说明、说明符号常量符号常量,表明符号代表的是一个常,表明符号代表的是一个常量,说明格式如下:量,说明格式如下:double const PI=12;const d
16、ouble PI=12;const在前、在后定义都可以。在前、在后定义都可以。2023/1/218主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社2、说明、说明数组常量数组常量,说明格式如下:,说明格式如下:int const I_ARRAY3=3,2,1;const char C_CHAR=a,b,c,d;3、说明、说明对象常量对象常量,说明格式如下:,说明格式如下:const CInline1 oC1,oC2;CInline1 const oC1,oC2;在一排中逗号隔开的变量,在一排中逗号隔
17、开的变量,只需要一个只需要一个const就行了;就行了;而指针变量的声明却需要而指针变量的声明却需要在每个变量前在每个变量前添加指针标记添加指针标记*,否则它就不是一个指针,而是一个一般变量。,否则它就不是一个指针,而是一个一般变量。2023/1/219主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社const与与C语言语言#define的差别的差别:#define PI 3.14无参宏不是符号常量无参宏不是符号常量,它没有数据类型,没有,它没有数据类型,没有值,在内存中不分配地址。它是在预处理时
18、作值,在内存中不分配地址。它是在预处理时作宏替换,不作类型检查。宏替换,不作类型检查。而而const定义的常量是符号常量定义的常量是符号常量,有数据类型,有数据类型,有值,且其值不可改变,在内存中有地址,编有值,且其值不可改变,在内存中有地址,编译时要作类型检查。译时要作类型检查。2023/1/220主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社6.2.2 const与指针与指针 指针涉及三个东西:指针涉及三个东西:一个是一个是指针变量本身指针变量本身;另一个是另一个是指针指针指针变量中所存放的
19、值;指针变量中所存放的值;再一个就是再一个就是指针所指向的对象指针所指向的对象。2023/1/221主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社指针其实就是地址指针其实就是地址,它代表的是指针变量中存,它代表的是指针变量中存放的地址值;放的地址值;而而指针变量是指用来存放指针的一个变量指针变量是指用来存放指针的一个变量,它,它用来存放地址;用来存放地址;注意注意:指针变量本身也有地址,有存储单元;:指针变量本身也有地址,有存储单元;指针所指向的对象是指那片空间所指针所指向的对象是指那片空间所“
20、存放的东存放的东西西”。指针变量本身的地址,与指针变量所指向的对指针变量本身的地址,与指针变量所指向的对象的存储地址是两个不同的地址。象的存储地址是两个不同的地址。2023/1/222主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社2023/1/223主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社const和指针变量的典型组合有以下三种情况:和指针变量的典型组合有以下三种情况:1、指向常量的指针、指
21、向常量的指针”const int*p;”2、常指针、常指针 ”char*const pc=a;”3、指向常量的常指针、指向常量的常指针 “const char*const pc=a;”太过分了,如此变太过分了,如此变化多端!化多端!2023/1/224主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社 const int *p;char *const pc=a;const char *const pc=a;画一条垂直线穿过指针声明中的星号(画一条垂直线穿过指针声明中的星号(*)位)位置。置。如果如果
22、const出现在线的左边,则指针指向的对象出现在线的左边,则指针指向的对象为常量;为常量;如果如果const出现在线的右边,则指针本身为常量;出现在线的右边,则指针本身为常量;如果如果const在线的两边都出现,则二者都是常量,在线的两边都出现,则二者都是常量,是指向常量的常指针。是指向常量的常指针。2023/1/225主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社1 指向常量的指针指向常量的指针 指针指向一个指针指向一个不可改变的量。不可改变的量。指向常量。指向常量。在声明时在声明时可以不初始
23、化。可以不初始化。该指针可以指向这个常量,也可以指向另一个该指针可以指向这个常量,也可以指向另一个常量。常量。指针变量里的指针值是可以改变的;指针变量里的指针值是可以改变的;但某一个具体指针值(即:某个指针)但某一个具体指针值(即:某个指针)所指向所指向的那个对象则是不可以改变的的那个对象则是不可以改变的。对象不可改变。对象不可改变。2023/1/226主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社它也可以指向变量;它也可以指向变量;从指针角度而言,所指向的是一个常量,通过从指针角度而言,所指向
24、的是一个常量,通过该指针该指针不能修改不能修改它所指向的对象;它所指向的对象;该指针变量可以存放常量地址也可以存放变量该指针变量可以存放常量地址也可以存放变量地址。地址。对象不可改变。对象不可改变。2023/1/227主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社const char*pc=ABCD;pc3=a;/不可以。不可以。pc=“EFGH”;/可以可以/step是一个指向常量的指针数组是一个指向常量的指针数组 const char*step3=left,right,top;step2=s
25、kip;/可以。可以。step21=i;/不可以。不可以。2023/1/228主讲教师:四川大学计算机学院主讲教师:四川大学计算机学院 *高级语言程序设计II 四川大学精品课程 C+:面向对象程序设计 主编:李涛 高教出版社2 常指针常指针 *const=;指针变量里面存放的是个常量,称为指针变量里面存放的是个常量,称为常指针常指针,指针变量里面装的是一个固定值,指针变量里面装的是一个固定值,在定义时必在定义时必须初始化。须初始化。常指针一旦初始化后,不能够再指向其他内存常指针一旦初始化后,不能够再指向其他内存单元。单元。通过常指针通过常指针可以修改它所指向的内存单元的内可以修改它所指向的内存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- +面向对象程序设计 第六章 常见问题 面向 对象 程序设计 第六
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内