2005年01月26日
网络银行对传统货币理论的影响
[ 作者:佚名    转贴自:本站搜集    点击数:191    文章录入:admin
网络银行在给中国的银行业带来新的生机和活力的同时,也对传统银行理论带来一定的冲击,如网络银行条件下的网络货币就将打破传统的货币理论。

  (一)货币的演变及其意义

  在商品经济中,货币作为一般等价物的本质是不变的,但货币的形式却随着生产和交换的发展而不断地演变。翻开货币发展的历史,我们会看到:1.实物货币。是人类最早的货币形态。各种商品如米、布、木材、贝壳、家畜等,都曾在不同时期内扮演过货币的角色。2.金属货币。其形态有一个从称量货币到铸币的过程,在质地上有一个从贱金属到贵金属的转变过程。铸币的产生,是人类货币史上的一次重大变革,打上官方烙印的金属才能成为货币,贵金属垄断了货币的地位。3.代用货币。是在贵金属货币流通的制度下,代替金属货币流通的货币符号——纸币,是货币形式的飞跃。4.信用货币。即充当流通手段和支付手段的信用凭证。如商业票据、现钞和支票完全依靠政府信用和银行信用而流通。5.网络货币的出现。伴随着现代信息技术在金融业的应用,电子商务的出现,电子支付手段应运而生。借助于电子信息网络技术而产生的电子货币、数字货币统称为网络货币。网络货币将随着信息网络技术的日益发展及其在金融业和商品交换过程中的广泛应用而不断发展,尤其是在网络银行出现后,网络货币将成为一种重要的货币形式而发挥其在商品经济活动中举足轻重的作用。在未来的网络时代中,网络银行将使货币变为一串我们永远不可以见到实物的数字。在货币的演变过程中,货币越来越轻,越来越虚化。

  随着货币形式的进一步演变及网络货币的出现,货币的本质也越来越清楚地呈现出来。货币的本质纯价值体是在社会交换过程和流通过程中被提炼、净化出来的,正如马克思所说:“流通成了巨大的社会蒸馏器,一切东西抛到里面去,再出来时都成为货币的结晶。”马克思正确地意识到货币的本质是价值体,但是他还没有能够把它从金币的物质价值体中进一步提炼出来。这是历史的局限性所致。经过第二次和第三次技术革命,“社会蒸馏器”借助于电力推动和印刷技术的进步,终于将货币价值体从币材的物质价值体中分离出来,提炼到纸币的形式。就纸币来说,尽管它还有币材价值体,但人们已经清楚地看到这两个完全可以成为分离之物了。用最新信息技术装备起来的现代化“社会蒸馏器”,进一步蒸发提炼得到几乎完全透明的纯价值体——数字货币、电子货币。现在人们终于可以清楚地看到了货币的本质就是从一切商品价值体中提炼出来的纯价值体,人类同质量劳动的结晶体。

  (二)网络银行条件下,网络货币对传统货币理论提出了挑战

  伴随着货币发生的根本变化,一些与货币有关的诸如货币理论、货币政策以及诸如通货膨胀之类的传统经济概念都将发生重大变化。

  一是数字货币、电子货币使传统的货币理论体系受到了冲击。传统的货币理论体系将货币等同于商品或实物资产,所以货币应该有价格。其实,货币本身不能像其他商品那样具有惟一的价格,它的价格表现为与无穷种类的商品以及不同货币之间的兑换比率。此传统理论认为货币金融体制严格受法律限制和政府管理,货币是法律的产物,但在网络货币时代,电子货币、数字货币不再具有商品或实物形态,不过它本身作为一种纯价值体,可和其他商品相交换,它的价格是它与无穷类商品之间的兑换比例,这因此又回到了物质直接交换时期,但这不是历史的单纯复归,而是货币的一种更高形态,而且或许是终结形态。另外,由于网络货币——电子货币、数字货币是一种纯价值体,它发挥的作用是完全自发的,而不像现行的纸币制度,货币的发行流通必须依靠国家强制力。

  二是网络货币将促使货币结构和货币内涵有所改变。在金融电子化的推动下,货币出现了新的形态,如信用卡、电子货币等,这些都是新货币形态产生的前奏,这是一种依托全球和网络银行产生的虚拟的无货币实体的数字符号。网络货币是货币在计算机网络中的存在形式。网络货币随着网络银行产生而产生,随着网络银行的发展而发展。将对传统的货币结构和货币内涵产生深远影响,甚至某种意义上改变其意义。其一,网络货币将部分替代流通中货币的作用使得传统的货币定义特别是基础货币的定义受到了挑战,基础货币通常是指创造存款货币作用的商业银行在中央银行的存款准备金与流通在银行体系之外的通货这两者的总和。而网络货币的出现,使货币实物形态虚拟化,商业银行自己实现了部分货币发行,在实质上部分弱化了中央银行垄断发行货币的特权;其二,网络货币对流通中部分通货的替代作用,使得传统意义的基础货币的作用受到影响,商业银行作为直接货币供给,其进行创造存款货币的存贷活动,提供货币供给的数量,都建立在基础货币上,基础货币及其增减变化直接决定着商业银行准备金的增减,从而决定着商业银行创造存款货币的数量。而网络货币对流通中通货的替代作用使得这种能量减弱,再加上网络货币是商业银行自发地创造的,且具有快速的瞬息万变的特点和颇具信用风险,也使得网络货币创造货币能力与传统的存款货币能力不同。

  三是网络货币对货币供给和货币需求产生重大影响。网络货币部分替代流通中的通货,部分通货以数字化、虚拟化形式出现,而中央银行发行的用于流通的通货是整个货币供给的一部分,因此对流通中通货的影响会直接影响到货币供给。影响最大的是狭义货币M1。M1=流通中的通货+活期存款。流通中的通货在M1中占比重较大,所以网络货币虚拟和替代部分通货,就较大程度上影响了狭义货币M1,其主要表现是:其一由于货币数字化、虚拟化,流通中的通货数量会减少而影响M1;其二是由于虚拟化、数字化、电子化的网络货币存在形式的不稳定性,对商业银行的存款也会带来不稳定性,从而会改变商业银行在中央银行的准备金数量,影响M1;其三是通过货币乘数对M1产生影响。作为货币供给之源的基础货币,可以引出数倍于自身的货币供给量把货币供给量与基础货币相比,其比值就是乘数。网络货币既影响基础货币也影响货币供给量,自然其比值关系也要受到影响,从而影响M1。

  网络货币对货币需求方向的影响,主要表现在网络货币部分替代流通中的通货,加快了货币的流通速度,从而对货币的需求会减少。另外,网络货币中如信用卡、电子货币还有信用创造的作用,也使得对货币的需求处于不稳定状态,从而导致利率波动,利率的波动又反过来导致货币需求的不稳定。货币需求的波动加大,就会降低利率作为货币政策传导机制的传导作用。

  四是伴随网络银行产生的网络货币向中央银行发出了挑战。由于网络货币对传统货币理论体系,对货币的结构、内涵及货币供给和货币需求均带来了冲击,作为货币当局的中央银行自然受到严重挑战。试想,如果中央银行不能控制网络货币的发行,基础货币的供给、需求无法科学有效地进行掌握、控制和根据经济运行情况进行调节,货币政策的操作也就不可能,网络银行条件下的网络货币形态很可能将这种情况变为现实。那么,作为货币当局的中央银行的三大职能——发行的银行、银行的银行、政府的银行也就会受到削弱甚至无效。另外,网络货币是全球一体化经济的交易媒介,因此,各国货币之间的价值关系——汇率也似乎会变得无存在之意义。

十四顶帽子与ERP

ERP实施的成功,靠的是实施顾问和实施企业的共同努力。其中,最为关键的,实施企业必须具有明确的实施目的。如果盲目地依赖实施顾问,图得一时便宜,最后的结果必定是苦涩的。所以,实事求是地量体裁衣,按需而做,才是明智的选择。记住,在资源一定的情况下,切忌向裁缝索取不切实际的帽子。

十四顶帽子

从前,有个人买了块布,去找裁缝做一顶帽子。他说:用这块布做一顶帽子。裁缝看了看布,说:没问题。那人听裁缝回答的干脆,又看了看布,觉得做一顶帽子还有很多,就问裁缝:那如果做两顶呢?裁缝又看了看布,回答,:可以。那人听裁缝这么回答,越发觉得布多,又问:那么做三顶呢?裁缝又回答:可以。”……最后那人留下布,裁缝答应做十四顶帽子。交货的日子到了,那人来取帽子。裁缝如约拿出了十四顶帽子,只是这十四顶帽子一般大小,都只能戴在手指头上。那人骂裁缝:我要的帽子是能戴在头上的,你做得那么小,让我怎么戴?裁缝苦着脸说:这么一块布,要做十四顶帽子,当然只能戴在手指头上了。这是一个老段子。时间又过了五百年……裁缝变成了ERP实施顾问。那人这次准备了一笔钱,请顾问在他的公司实施ERP系统。裁缝(这时应该称作ERP实施顾问了)看了看这笔钱,说:没问题。

那人说:对于ERP我们公司是重视的,只是公司的第一把手,第二把手,第三第四把手……这些老总们都日理万机,所以具体问题你们可以和业务人员一起决定,大问题可以等到每月项目进度会上向X总汇报。

评语:第二顶帽子。根据北美地区的调查,ERP项目实施成功的首要因素是公司高层的支持。注意:这里的支持是指实际上的支持。ERP的表象是一套软件,但这仅仅是表象而已,其实质是企业新的业务流程。如果你已经忘记了当初选择实施ERP的原因,那么现在最好回忆一下:是快速增长的业务?是捉襟见肘的管理?是日益高涨的成本和库存?是部门间日益困难的直辖市和沟通?还是因为厌倦了救火大队长的角色?或者笼统地说是为了提升企业的竞争力?如果原因和这些情况有关,那么现在,在ERP实施中给予快速而具体的高层决策,以及公开表明的态度是完全值得的。试想如果企业高层对于企业将来的内部管理流程吝啬时间,那究竟还有什么是值得关注的呢?把ERP实施中的决策丢给你的项目组和裁缝,或者让他们来猜测你的意图,或者企业高层本身对项目持有保留或观望的态度,这些做法都是对ERP项目最为有害的第二顶帽子。另外,即使是因为什么别的原因选择了ERP,如果还想让它成功的话,请不要把它丢给你的项目组和裁缝因为这将使他们陷入孤立的境地和不公平的待遇,而企业也将失去一次飞跃的机会。

那人说:我们的人手很紧,业务骨干都已身负重任,所以关键用户只能很少,而且都不能是全职搞ERP,或者我可以找一些新招的毕业生,让他们边学业务边学ERP

评语:第三顶帽子。业务骨干之所以为骨干,是因为他们了解公司的动作,经验丰富,踏实肯干。还有什么人比他们更适合担负ERP关键用户(Key User)的重任?不要等到系统上线前才发现流程不对,这时你不得不使用他们,而返工永远更为吃力。把关键用户的责任推到顾问这一边,是否真占了便宜?其实只是第三顶帽子而已。而且一旦项目结束,你边一去管理新平台动作的队伍都还没有建立起来。

那人说:我们公司向来人员跳槽频繁,所以项目关键用户和业务骨干会经常变化。

评语:第四顶帽子。第四顶帽子麻烦可不小了。很多心血付诸东流,而实施服务方对此是无能为力的。虽然人员流动的损失可以靠合理的知识管理弥补。但是想办法让你的关键用户队伍保持稳定,这可以大大节省顾问们的重复劳动,除了不断培训新人,他们还有很多更重要的事要做。

那人说:我们认为ERP对公司的将来很重要,所以项目必须要有很好的文档管理,比如当前流程、业务蓝图、系统配置文档、系统开发文档、测试脚本、培训教材、会议记要……这些文档都应当由实施服务方完成。

评语:第五顶帽子。文档管理真的很重要,但并不是所有的文档都一样重要。不要把自己定位成一个挑剔的看客。有些重要的文档应当和顾问一想完成,因为将来使用这此文档的是你而不是他。还有一些文档完全可以由关键用户和项目秘书承担。在有些项目中你会发现顾问们的专长好像是Office,而不ERP。这时应当反省一下你是否在让他们忙于做第五顶帽子。

那人说:我们发现ERP中还有这些,这些,这些……的功能,我还有这样,这样,这样……的想法。你们应该都实施进去。

评语:根本意义上的第六顶帽子。现代ERP软件涵盖了企业动作的各个方面,功能之丰富难以想象,而项目必须有合理的范围(Scope)控制。随便找一本项目管理的书,它会告诉你失控的范围像森林大火一样可怕。一个人吃饭都会眼大肚子小,企业的消化能力更是往往比管理层期望的小。

那人说:组织结构变动在我们公司是司空见惯的,如果在项目过程中发生的话,项目内容也必须做相应的调整,无论是人员上还是系统设置和数据准备上。

评语:第七顶帽子。不变的企业是死亡的企业,但很多企业也是给不停的变动折腾死的。ERP本身是灵活的,对于企业结构的变化有很强的适应力,但这并不等于说在项目中不应该控制企业的变动。对于这个问题应当分两方面看,首先,ERP项目的立意要高,要高到和公司的组织结构规划一致,两个问题当一个问题来看。其次,就像人在有能力适应社会变化之前,会经历襁褓期,在ERP项目实施中(ERP的襁褓期)应当减少不必要的震荡,使项目快速地成功地完成和长大。

那人说:我们公司有80000种物料和产品,5000个客户,3000个供应商,10000项固定资产… …都还没有统一的编码和主记录。不过各个部门手头倒是有自己的一套资料,我们也想借ERP把这个问题解决一下。

评语:第八顶帽子。如果把ERP系统设置比做骨骼,主数据就是血肉。本来在大型企业中像物料等主数据的编码和管理可以单独作为一个项目来实施。但是由于ERP中提供了很好的主数据管理工具,而且ERP中的主数据有专门的数据结构和逻辑关系,所以将主数据的整理工作直接作为ERP项目的一个部分对于企业业说是很有好处的。但是对于实施服务方来说,主要责任是确定主数据的分类、字段选择、提供资料搜集格式和帮助导入系统。而具体的搜集和整理工作毫无疑问应当由客户方完成。当然顾问应当对整理工作的组织和计划提供经验和帮助。但是事实往往出乎意料:在有些项目中,企业内部竟然对数据的收集和质量负责,你会看到顾问成了各部门间的协调者,顾问在催各部门提供资料,顾问在电子表格中整理数据。你在庆幸又让裁缝多做了一顶帽子时,是否想过:奇怪,他怎么知道财务部的广西糖业有限公司就是销售部的广西经销部……”

那人说:我们关键用户少,所以最张用户的培训应当由实施服务方来做。而且我们公司人多,工作任务重,出差的又多,所以最好多办几趟,有些人可能还需要开些小灶。

评语:第九顶帽子。这个问题是第三顶帽子的必然结果。前面讲过管理高层的支持是ERP实施的第一要素,那么培训就是排在第二的影响因素。但是关键用户的培训和最终用户(End User)的培训是不同的。由关键用户培训最终用户至少有以下一些好处:<1>语言上不存在障碍。同样一个流程或者操作,最终用户一般更能接受关键用户的讲法,顾问的语言往往带有太多的ERP术语,而用户行业用语太少。<2>更容易组织。由于顾问们属企业的外部人员,他们的威慑力或者面子往往不够大,对企业各部门的协调能力往往流于形式。<3>自然培养起企业内部的支持路径,而且和直接询问顾问相比,最终用户在询问关键用户前往往会用更多时间先思考一下。<4>锻炼了关键用户。

那人说:财务部有套旧系统,是信息部编的。信息部目前人手不够,不可能将期初数据整理成你们需要的格式。最好你们自己直接从旧系统中导出来整理。

评语:第十顶帽子。很荒谬吧,但是确实存在这样的情况。理论上实施服务方不具备客户旧系统的技能,所以应先由客户旧系统的技能,所以应先由客户负责将期初数据整理成一定的格式,再由项目组把数据导入新系统。但是系统上线好比一场战役的总攻,日子在一天天地过去,业务凭证发越积越多,越拖越难追,这时你的友邻部队突然消失了,你必须在延迟总攻和分散兵力支持友邻上做出选择。

那人说:我们要求新旧系统并行相当一段时间,但是这样各个部门都已经是民怨鼎沸了,特别是财务部,所以两套系统的对账工作只能由你们来做了。

评语:第十一顶帽子。本来,很多企业都没有并行系统对账的经验,特别是和ERP系统的并行对账,顾问会设计对账的方案,培训用户和开发一些工具和报表,也可以直接由顾问组织整个对账工作,但是如果你看到凭证堆满了项目室,全部是顾问在对账,情况就不太正常了——他们正在做第十一顶帽子。

那人说:报表应该都是你们来做,我们有很多报表需求,有些有格式,不过数据的逻辑关系和来源不太清楚,有些目前格式还没有,只有一人些想法。

评语:第十二顶帽子。尽量使用ERP的标准报表,因为标准报表反映了ERP中的管理思想。自定义的报表有难有易,难往往不是难在报表的编写上,而是难在数据的逻辑关系的来源选取上,而这又决定于你到底想要这个报表做什么。对于这些问题的分析能力是需要培养的。仅从这一点,客户方也应当参与报表的制定过程。更何况今后企业本身和报表需求都会变化,那时学比现在学可紧张多了。

那人说:我们信息部人少,所以有些用户网络连不上、病毒等诸如些类的问题可能也会来问你们,反正都和电脑有关,你们一并支持一下。另外,现在系统备份、权限管理的工作还是你们来做,等你们走了,我们再找人做。

评语:第十三顶帽子。例如有个公司的网络流行一种病毒,客户一着急就打电话向顾问抱怨ERP登陆不上了。顾问们哭笑不得,只得埋头做第十三顶帽子。

那人说:我们突然得了一种怪病,只要你们在,我们自己的专业知识好像突然都忘了。

评语:第十四顶帽子。很多人抱怨ERP难,但是他们的问题往往和ERP无关,有些纯粹是自己专业的问题。只是当依赖成了习惯,思考就变得无足轻重了。

……



ERP
实施服务一般可以有两种定价方式: 按人天计价(Time & Material)和固定价格(Fixed Price)。从全球范围看,主要是前者居多。原因很简单,ERP实施顾问是帮助一个企业把它的运作整合以后搬上一个电脑平台。但是每个公司的情况千差万别,实施服务方显然承担了自己无法控制的风险。

但是在我国,由于种种原因却是采用固定价格为多。两种定价方式孰是孰非,不是本文所要讨论的。

本文想说明的是在采用固定价格这种现实的背景下,客户方的有些情况是会对服务方和项目的质量造成损害的。有些是无意识的,有些则是所谓的自助餐效应造成的。但是无论哪种情况,我们应当记住一点:ERP项目是一个艰苦的历程,它的结果只有两种:双赢或者双输。正视这些问题,借助双方的诚意和决心,我们才能实现目标,完成企业的管理革命。

另外打个关于顾问角色的比方:顾问应该是探索新领域的向导,而不是拉雪橇的狗。

2005年01月21日

 

一、 填空题(25小题,共50分)
(以下每小题1分,共10分)
 1 C++中,函数的参数有两种传递方式,它们是值传递和 地址或指针或引用传递
 2 当一个成员函数被调用时,该成员函数的 this指针 指向调用它的对象。
 3 在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有 作用域分隔符限定时 ,对此数据成员的访问将出现歧义。
 4 拷贝构造函数使用 引用 作为参数初始化创建中的对象。
 5 在公有继承的情况下,基类数据成员在派生类中的访问权限 保持不变
 6 描述命题“A小于B或小于C”的表达式为 A<B||A<C 。
 7 new申请某一个类的动态对象数组时,在该类中必须能够匹配到 没有形参的或缺省参数 构造函数,否则应用程序会产生一个编译错误。
 8 静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象 共享
 9 为了避免可能出现的歧义,C++if…else语句配对规则规定为:else总是与 与最近的if 配对。
 10 “int a=3,b=4,c=5;”,表达式a+b>c&&b==c”的值是 0

(以下每小题2分,共20分)
 11. 面向对象的程序设计有四大特征,它们是抽象、封装、
继承多态
 12. 在Visual C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型
不同 ;在基类和派生类中,成员函数的覆盖是指 派生类成员函数与在基类被覆盖的成员函数名、参数个数、参数类型和返回值类型均相同
 13. 构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、
析构函数没有参数析构函数可以定义为虚函数
 14. 动态联编要满足两个条件,它们是
被调用的成员函数是虚函数用指针或引用调用虚函数
 15. 在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为
抽象类 ,定义该类至少具有一个 纯虚函数
 16. 在C++类中,const关键字可以修饰对象和成员函数,const对象不能
被修改const成员函数不能 修改类数据成员
 17. 举出C++中两种用户自定义的数据类型:
枚举
 18. C++中没有字符串类型,字符串是通过
字符数组 来表示的,每一个字符串都有一个结尾字符 \0
 19. C++中没有输入输出语句,输入输出是通过
输入输出库 实现的, 写出一条打印整型变量n的输出语句:cout<<n;
 20. 举出C++中两种代码复用的方式:
继承 复用

(以下每小题4分,共20分)
 21. 下面程序的运行结果是
 3 
 #include <stdio.h>
 void main()
 {
  char a=’a',b=’j';
  float x;
  x=(b-a)/(‘F’-'A’);
  printf(“%d\n”,(int)(3.14*x));
 }

 22. 下面程序的运行结果是
2 5 8 11 14
 #include “iostream.h”
 void main( )
 {
  int i=1;

  while (i<=15){
   i++;
   if (i%3!=2) continue;
   else cout <<”i=”<<i<<endl;
  }
 }

 23. 下面程序的运行结果是________。
 #include “iostream.h”
 class test
 {
 private:
  int num;
  float fl;
 public:
  test( );
  int getint( ){return num;}
  float getfloat( ){return fl;}
  ~test( );
 };

 test::test( )
 {
  cout << “Initalizing default” << endl;
  num=0;fl=0.0;
 }

 test::~test( )
 {
  cout << “Desdtructor is active” << endl;
 }

 void main( )
 {
  test array[2];
  cout << array[1].getint( )<< ” ” << array[1].getfloat( ) <<endl;
 }

 Initalizing default
 Initalizing default
 0 0
 Desdtructor is active
 Desdtructor is active

 24. 下面程序的运行结果是________。
 #include <iostream.h>
 class A
 {
 public:
  A(){cout<<”A::A() called.\n”;}
  virtual ~A(){cout<<”A::~A() called.\n”;}
 };

 class B:public A
 {
 public:
  B(int i){
  cout<<”B::B() called.\n”;
  buf=new char[i];}
  virtual ~B()
  {
   delete []buf;
   cout<<”B::~B() called.\n”;
  }
 private:
  char *buf;
 };

 void fun(A *a)
 {
  delete a;
 }

 void main()
 {
  A *a=new B(15);
  fun(a);
 }
 A::A() called.
 B::B() called.
 B::~B() called.
 A::~A() called.

 25 下面程序的运行结果是________
 #include <stdio.h>
 int a[ ]={1,3,5,7,9};
 int *p[ ]={a,a+1,a+2,a+3,a+4};
 void main( )
 {
  printf(“%d\t%d\t%d\n”,a[4],*(a+2),*p[1]);
  printf(“%d\t%d\t%d\n”,**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);
 }
 9 5 3
 8 4 7

二、 问答题(每小题5分,共20分)

 1 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。

 2 简述成员函数、全局函数和友元函数的差别。
  解答要点:以下几点必须说清楚:
  成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。
  不是在类中定义的成员函数都是全局函数。
  如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。

 3 简述结构化的程序设计、面向对象的程序设计的基本思想。
  解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。

 4 结构struct和类class有什么异同?
  解答要点:structclass都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。

三、找出下面程序(或程序段)中的语法错误,并予以纠正(每小题4分,共8分)

1)程序功能是倒序输出各给定的字符串。
 #include <stdio.h>
 void main()
 {
  char str[5][ ]={“First”,”Second”,”Third”,”Forth”,”Fifth”};
  char *cp[ ]={str[4],str[3],str[2],str[1],str[0]};
  int i;

  while(i<=5)
  {
   printf(“%c “,*(cp+i));
   i++;
  }
 }
 
① “char str[5][ ]={“First”,”Second”,”Third”,”Forth”,”Fifth”};”应为
  ”char str[5][10 ]={“First”,”Second”,”Third”,”Forth”,”Fifth”};”
 ② “while(i<=5)”应为”while(i<5)”
 ③ “printf(“%c “,*(cp+i));”应为”printf(“%s”,*(cp+i));”
 ④ “int i;”应为”int i=0;”

2)程序功能是将各个平方根值放入数组中。
 #include <stdio.h>
 void main()
 {
  int max,a,i;
  scanf(“%d%d”,max,a);
  double x[max];

for (i=0;i<max;i++)
   x[i]=sqrt(a*i);
 }
 ① 增加”#include <math.h>”
 ② “scanf(“%d%d”,max,a);”应为”scanf(“%d%d”,&max,&a);”
 ③ “double x[max];”改为:
 ”double *x=new double[max];”
  …
 ”delete []x;”

四、(8分)下列shape类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。请从shape类派生三角形类(triangle)、矩形类(rectangle),并给出具体的求面积函数
 class shape{
   public:
   virtual float area( )=0;
   };
  
 float total(shape *s[ ],int n)
   {
   float sum=0.0;
   for(int i=0;i<n;i++)
   sum+=s[i]->area( );
   return sum;
  }
 class Triangle:public Shape
 {
 public:
  Triangle(double h,double w){H=h;W=w;}
  double Area() const{return H*W*0.5;}
 private:
  double H,W;
 };

 class Rectangle:public Shape
 {
 public:
  Rectangle(double h,double w){H=h;W=w;}
  double Area()const{return H*W;}
 private:
  double H,W;
 };

五、(6分)完成顺序查找函数f_seq( )。其过程是:从表头开始,根据给定的模式,逐项与表中元素比较。如果找到所需元素,则查找成功,并打印出它在表中的顺序号。如果查找整个表仍未找到所需对象,则查找失败
 #include <stdio.h>
 void f_seq(char *list[],char *object,int len)
 //list 指针数组,指向字符串
 //object 模式串
 //len 表的长度
 {
  char **p;
  int strcmp(char *s,char *t);

  p=list;
  while (_____①______) //
p<list+len
   if (strcmp(*p,object)==0)
    break;
   else ______②_______; //
p++
   if (p<list+len)
    printf( “Success! **% d\n”,p-list);
   else printf(“Unsuccess!\n”);
 }
 int strcmp(char *s,char *t)
 {
  for (;*s==*t; s++,t++)
   if (*s==’\0′)
    return(0);
    return(_____③______); //
s-t或*s-*t或1
 }

六、(8分)完成使链表逆置函数reverse,若有链表:


逆置后则变为:

链表结点的结构如下:

 struct node
 {
  int num;
  struct node *next;
 }
 struct node* reverse(struct node *head)
 //head 链表头结点
 {
  struct node *p,*temp1,*temp2;
  if(head==NULL____①____) return head; //
||head->next==NULL
  p=head->next;head->next=NULL;
  while(____②____) //
p!=NULL或p
  {
   temp1=head;
   ____③____; //
head=p;
   temp2=p;
   p=p->next;
   ____④____; //
temp2->next=temp1;或head->next=temp1;
   }//Match while statenment
   return head; //返回逆置后的链表的头结点
 }

 

-> C++期末考试题(一)<-


、 填空题(25小题,共50分)
(以下每小题1分,共10分)
1. 在C++中,函数的参数有两种传递方式,它们是值传递和

2. 当一个成员函数被调用时,该成员函数的
指向调用它的对象。
3. 在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。对两个有相同名字的数据成员进行访问时,如果没有
,对此数据成员的访问将出现歧义。
4. 拷贝构造函数使用
作为参数初始化创建中的对象。
5. 在公有继承的情况下,基类数据成员在派生类中的访问权限

6. 描述命题”A小于B或小于C”的表达式为

7. 用new申请某一个类的动态对象数组时,在该类中必须能够匹配到
构造函数,否则应用程序会产生一个编译错误。
8. 静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象

9. 为了避免可能出现的歧义,C++对if…else语句配对规则规定为:else总是与
配对。
10. 设”int a=3,b=4,c=5;”,表达式”(a+b)>c&&b==c”的值是

(以下每小题2分,共20分)
11. 面向对象的程序设计有四大特征,它们是抽象、封装、


12. 在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型
;在基类和派生类中,成员函数的覆盖是指

13. 构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,而析构函数名是在类名前加一个~、


14. 动态联编要满足两个条件,它们是


15. 在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为
,定义该类至少具有一个

16. 在C++类中,const关键字可以修饰对象和成员函数,const对象不能
,const成员函数不能

17. 举出C++中两种用户自定义的数据类型:


18. C++中没有字符串类型,字符串是通过
来表示的,每一个字符串都有一个结尾字符

19. C++中没有输入输出语句,输入输出是通过
实现的, 写出一条打印整型变量n的输出语句:

20. 举出C++中两种代码复用的方式:


(以下每小题4分,共20分)
21. 下面程序的运行结果是

  #include <stdio.h>
  void main()
  {
   char a=’a',b=’j';
   float x;
   x=(b-a)/(‘F’-'A’);
   printf(“%d\n”,(int)(3.14*x));
  }
22. 下面程序的运行结果是

  #include “iostream.h”
  void main( )
  {
   int i=1;

   while (i<=15){
    i++;
    if (i%3!=2) continue;
    else cout <<”i=”<<i<<endl;
   }
  }
23. 下面程序的运行结果是

  #include “iostream.h”
  class test
  {
  private:
   int num;
   float fl;
  public:
   test( );
   int getint( ){return num;}
   float getfloat( ){return fl;}
   ~test( );
  };
  test::test( )
  {
   cout << “Initalizing default” << endl;
   num=0;fl=0.0;
  }
  test::~test( )
  {
   cout << “Desdtructor is active” << endl;
  }
  void main( )
  {
   test array[2];
   cout << array[1].getint( )<< ” ” << array[1].getfloat( ) <<endl;
  }
24. 下面程序的运行结果是

  #include <iostream.h>
  class A
  {
  public:
   A(){cout<<”A::A() called.\n”;}
   virtual ~A(){cout<<”A::~A() called.\n”;}
  };

  class B:public A
  {
  public:
   B(int i){
   cout<<”B::B() called.\n”;
   buf=new char[i];
  }
  virtual ~B(){
  delete []buf;
  cout<<”B::~B() called.\n”;
  }
  private:
   char *buf;
  };
  void fun(A *a)
  {
   delete a;
  }
  void main()
  {
   A *a=new B(15);
   fun(a);
  }
25. 下面程序的运行结果是

  #include <stdio.h>
  int a[ ]={1,3,5,7,9};
  int *p[ ]={a,a+1,a+2,a+3,a+4};
  void main( )
  {
   printf(“%d\t%d\t%d\n”,a[4],*(a+2),*p[1]);
   printf(“%d\t%d\t%d\n”,**(p+1)+a[2],*(p+4)-*(p+0),*(a+3)%a[4]);
  }

二、 问答题(每小题5分,共20分)
1. 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?