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