c++程序设计实践教程答案及辅导马光志.doc
- 文档编号:265761
- 上传时间:2022-10-08
- 格式:DOC
- 页数:136
- 大小:1.23MB
c++程序设计实践教程答案及辅导马光志.doc
《c++程序设计实践教程答案及辅导马光志.doc》由会员分享,可在线阅读,更多相关《c++程序设计实践教程答案及辅导马光志.doc(136页珍藏版)》请在冰豆网上搜索。
第1章引论
一、基本内容
机器语言?
汇编语言?
高级语言?
元语言?
编译连接?
早期绑定?
晚期绑定?
面向对象
的设计步骤?
封装?
重载?
多态?
继承?
抽象?
程序结构与组织?
本章对面向对象的有关
概念不要求完全掌握?
二、学习要点
机器语言是一种计算机自身可以识别的语言?
机器语言程序是由机器指令和数据形成的
二进制文档?
机器语言指令通常由操作码和地址码构成?
机器语言程序难于理解?
编程繁
琐?
不易维护?
汇编语言是一种符号化的能直接将汇编指令翻译为机器指令的程序设计语言?
汇编语言
和机器语言同为低级语言?
汇编语言更易理解和用于编程?
但它仍然是一种面向机器的低
级程序设计语言?
高级语言程序是一种以类似于自然语言形式描述指令及数据的程序设计语言?
高级语言
程序经编译可生成低级语言程序?
高级语言通常指是面向过程的程序设计语言?
即描述的
是问题求解的过程?
算法或方法?
问题求解的常用手段是功能分解?
面向对象的程序设计
语言是一种能对新类型描述其属性和操作的高级语言?
同时为新类型的定义提供了重载?
封装?
多态?
继承?
组成等描述机制?
元语言是一种用来描述其他语言的语言?
其特点是描述准确严格?
抽象程度高?
常用的
描述程序设计语言的元语言是BNF语言?
编译程序是用来将高级语言翻译为低级语言的程序?
反编译程序是用来将低级语言翻译
为高级语言的程序?
程序设计语言的翻译方式通常有两种?
即解释方式和编译方式?
C++
一般采用编译方式?
高级语言程序通常要经过预处理?
词法分析?
语法分析?
代码生成和模块连接等环节?
才能被编译成可被计算机执行的程序?
绑定(binding)就是将函数的入口地址同函数调用指令的地址码相联系的过程?
绑定就是
要计算被调用函数的入口地址?
并将该地址存放到函数调用指令的地址码部分?
绑定分为
静态绑定和动态绑定两种形式?
通常又叫早期绑定和晚期绑定?
静态绑定在程序执行前完
成?
由编译程序或操作系统的装入程序计算函数的入口地址?
动态绑定则在程序执行过程
中完成?
由应用程序自身计算函数的入口地址?
面向对象的技术八十年代初开始出现?
SMALLTALK?
C++?
JAVA?
C#等是较为著名的
C++程序设计实践教程・254・
面向对象的程序设计语言?
C++在20世纪80年代初出现?
直到1983年C++的名字才正式
确定下来?
1986年?
BjarneStroustrup在美国AT&T的贝尔实验室开发了C++?
面向对象的设计要经历系统分析?
系统设计?
对象设计与对象实现等四个阶段?
每个阶
段之间的界限不是十分明显?
这种早期模型和晚期模型的一致性?
使面向对象的技术能更
好地支持快速原型法?
封装是将对象的“属性”和“方法”包装在一起?
并对外部提供不同权限的访问接口的
机制?
重载是指用同名的操作针对不同的类型完成不同的功能?
重载是多态的一种特例?
重载又称为编译时多态?
多态则特指运行时多态?
多态是指同名的操作针对不同的类型表
现出不同的行为?
继承是指一种类型接受并利用另一种类型的属性和操作的机制?
继承可
以分为取代继承?
包含继承?
受限继承和异化继承等多种方式?
抽象是指一种从事物实例得到事物的共同属性和操作从而形成事物类型描述的过程?
或
从若干低级的事物类型不但提炼形成高级或更具普遍意义事物类型描述的过程?
C++程序是一种由变量?
过程或函数以及类型描述构成的混和结构的程序织?
因此?
从
这个意义上说?
C++不是一种纯的面向对象的程序设计语言?
三、习题答案
1.1高级语言程序经过哪些阶段才能成为可执行程序?
解:
高级语言程序通常要经过预处理?
词法分析?
语法分析?
代码生成和模块连接等阶段?
才能被编译成可被计算机执行的程序?
1.2什么叫静态连接?
什么叫动态连接?
它们有什么区别?
解:
静态连接是由编译程序完成的?
编译程序将编译生成的目标语言连接成可执行程序文
件的过程?
动态连接是由操作系统完成的?
在应用程序执的行过程中?
操作系统根据被调用的函数
名连接内存中的动态连接库函数?
若相关动态连接库被移出内存?
则重新装入动态连接
库并重新连接?
静态连接是在程序执行之前完成的?
动态连接是在程序的执行过程中完成的?
静态连接
程序在执行时不需要再次装入程序文件?
动态连接程序在执行时一般需要重新装入程序
文件?
因此?
静态连接程序一般来说比动态连接程序执行速度快?
静态连接程序需要将
程序文件全部装入内存?
如果不同的程序包含了同样的函数代码?
就会在内存装入这些
函数的多个副本?
动态连接程序总是共用同一个函数副本?
因此?
静态连接程序一般要
比动态连接程序占用更多的内存?
1.3什么叫静态绑定?
什么叫动态绑定?
它们有什么区别?
解:
静态绑定是在程序运行之前进行的?
编译程序或操作系统在装入程序后?
计算函数的
习题答案・255・
入口地址?
并将该地址填写到相应的函数调用处?
动态绑定是程序运行之中完成的?
应用程序在执行过程中?
激活由编译程序生成的?
通
过静态或动态方式连接的一段代码?
计算函数的入口地址并填写到相应的函数调用处?
两者的区别在于:
静态绑定在程序执行之前完成?
由编译程序或操作系统计算函数的入
口地址?
动态绑定在程序运行之中完成?
由应用程序自己计算函数的入口地址?
1.4什么叫封装?
提供封装机制有什么好处?
解:
封装是将对象的“属性”和“方法”包装在一起?
并对外部提供不同权限的访问接口
的机制?
提供封装机制的好处在于:
?
1?
通过封装对象的“属性”和“方法”?
为对象定义了系
统边界?
?
2?
在保持封装接口不变的情况下?
可以改变对象的内部结构?
而不会影响对
象的外部特性?
从而为对象进化提供了方便?
?
3?
由于封装屏蔽了对象“方法”的细节?
从而保证核心算法不被泄露?
有助于保护软件开发机构的知识产权?
1.5什么叫包含继承?
什么叫受限继承?
解:
包含继承是一种派生类对象完整继承所有基类“属性”和“操作”?
并且增加自己的“属
性”和“操作”的继承方法?
受限继承是一种派生类对象部分继承基类“属性”和“操作”?
并且不增加新的“属性”
和“操作”的继承方法?
1.6?
++语言有何特点?
解:
?
1?
C++是?
语言的超集?
继承了?
语言的代码质量高?
运行速度快?
可移植性好等特
点?
?
2?
?
++是一种强类型的语言?
这使得开发人员在编译阶段就能发现?
++程序的
潜在错误?
?
3?
?
++的表达能力由于多继承特性?
丰富的运算符及运算符重载机制而远
远强于其他面向对象的语言?
?
4?
C++通过函数模板和类模板提供了更高级别的抽象能
力?
从而进一步提高了C++的表达效率?
?
5?
C++提供了面向对象的异常处理机制?
从
而使程序更加易于理解和维护?
并为局部对象提供了自动析构等有效手段?
从而可避免
因局部对象未析够而造成的资源泄露?
包括内存泄露?
?
?
6?
C++的名字空间解决了不
同机构的软件模块的标示符同名冲突问题?
从而为大型软件的开发和软件容错提供了有
效手段?
?
7?
在对象的内存管理方面?
C++提供了自动回收和人工回收两种方式?
这是
开发高效率的系统软件所必需的?
但另一方面却容易出错且难于掌握?
?
8?
C++程序是
由类?
变量和模块混合构成?
不象JAVA那样完全由类构成?
1.7应当怎样组织?
++的程序?
解:
一个程序由包含文件?
类程序文件?
函数程序文件等多种文件构成?
根据程序所用的库函数?
收集要包含的标准头文件?
将其加入到自己定义的包含文件中?
自定义的包含文件供所有程序文件使用?
该文件包含类型?
变量?
函数的说明信息而非
C++程序设计实践教程・256・
定义信息?
类程序文件是指包含了成员函数函数体定义的文件?
而不是仅包含成员函数原型的说明
信息文件?
函数程序文件是指包含了函数头及其函数体定义的文件?
而不是仅包含函数
原型的说明信息文件?
如果变量?
函数不为整个程序所共享?
则将它们定义为局部变量和函数?
习题答案・257・
第2章C++的变量、类型及函数
一?
基本内容
声明?
定义?
左值?
右值?
变量定义?
匿名变量?
只读变量?
挥发变量?
类型解释?
枚
举类型?
引用类型?
函数原型?
函数重载?
编译换名?
缺省参数?
省略参数?
调用开销?
函数内联?
二?
学习要点
声明是指对变量?
函数和类型的不完整描述?
定义是指对变量?
函数和类型的完整描述?
一个变量?
函数和类型标识通常可以声明多次?
但只能定义一次?
变量声明通常只描述变
量的类型和名称?
但不分配内存或进行初始化?
函数声明只说明函数的函数名?
参数类型
和返回类型?
不说明函数的函数体?
类型声明通常只说明类型名不描述类型体?
主要指class?
struct?
union等类类型?
例如?
类名的前向引用声明?
C++的变量定义比C自由?
C的变量定义必须出现在函数前或语句前等固定位置?
而变
量定义的初始化很少能用任意表达式?
C++的变量定义位置几乎没有限制?
变量定义的初
始化时可以用任意表达式?
任意表达式指左值或右值表达式?
左值表达式是指能出现在等号左边的表达式?
大部分变量都能出现在等号左边?
因而单
个变量通常可以做左值表达式?
函数调用如果返回值引用类型?
则通常也可以出现在等号
左边?
因此?
返回引用类型的函数调用也可作左值表达式?
此外?
C++的前置++和—运算
和赋值运算表达式也是左值表达式?
当然?
运用运算符重载技术?
几乎任何包含对象运算
的表达式都可定义为左值表达式?
例如?
对象加法运算表达式是右值表达式?
但可以重载
为左值表达式?
只是习惯上不能这样做?
右值表达式是指能出现在等号右边的表达式?
所有的表达式都是右值表达式?
包括单个
变量?
函数调用和由运算符构成的任何表达式?
因此?
左值表达式也是右值表达式?
即出
现在等号左边的表达式一定能出现在等号右边?
反之?
右值表达式不一定是左值表达式?
C++的变量定义虽然比C自由?
但在定义自动变量时尤其自动数组变量时?
最好按照C
的定义方法定义?
否则可能付出较大的空间代价?
全局变量的初始化通常由开工函数完成?
C程序没有开工函数和收工函数?
一个C++程
序编译通常由三个部分构成:
开工函数?
main函数?
收工函数?
因此?
即使main函数函数
体为空?
开工函数或收工函数也可能运行并产生输出结果?
开工函数和收工函数是由编译
程序生成的匿名函数?
因而是不可访问或调用的?
当应用程序开始运行时?
首先执行开工
C++程序设计实践教程・258・
函数?
然后执行main函数?
最后执行收工函数?
开工函数主要完成全局变量的初始化和全
局对象的构造?
收工函数主要负责全局对象的析构?
在对变量进行初始化时?
如果初始化表达式的类型与变量的类型不符?
则编译程序通常
会产生匿名变量?
匿名变量由于没有变量名?
其值当然是不可访问的?
只读变量用const说明?
必须在定义的同时立即初始化?
之后不能改变只读变量的值?
函数的参数和返回类型也可以是只读的?
只读参数的初始化在函数调用时传递值?
如果实
参的类型和形参类型不同?
同样也可能产生匿名变量?
在一般情况下?
函数的返回类型缺
省是只读的?
例如intf()就相当于constintf()?
需要注意的是?
int&g不等价于constint&g()?
前者的函数调用是一个左值?
即可以出现这样的表达式g()=4?
而后者的函数调用是一个右
值?
挥发变量用volatile说明?
多用在多任务环境做信号灯?
以便进行P-V操作之类的协同
处理?
挥发变量是指本程序?
本进程或本线程没有修改其值但其值在自主变化的变量?
出
现这样的情况显然是因为另外的程序?
进程或线程在操作?
在进行类型解释时?
必须按照运算符的优先级和结合性解释?
即首先解释优先级较高的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 程序设计 实践 教程 答案 辅导 马光志