分享
 
 
 

C++ FAQ Lite[6]--综述(新)

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

[6] 综述

(Part of C++ FAQ Lite, ]Copyright © 1991-2001, Marshall Cline, cline@parashift.com)

简体中文版翻译:申旻nicrosoft@sunistudio.com东日制作室东日文档

FAQs in section [6]:

][6.1] C++ 是一种实用的语言吗?

][6.2] C++ 是一种完美的语言吗?

][6.3] 面向对象(OO)有什么用?

][6.4] C++ 比 Ada 更好吗?(或 Visual Basic, C, FORTRAN, Pascal, Smalltalk,或其它的语言?)

][6.5] 谁在用C++?

][6.6] 学习 OO/C++ 需要多长时间?

][6.7] 从商业角度看 C++ 有哪些特征?

][6.8] 虚函数(动态绑定)对于 OO/C++来说是主要的吗?

][6.9] 我来自密苏里州。你能给我一个理由,为什么虚函数(动态绑定)造成很大的不同?

][6.10] C++ 是否向下兼容 ANSI/ISO C?

][6.11] C++ 标准化了吗?

][6.12] 何处能得到 ANSI/ISO C++ 标准的拷贝?

[6.1] C++ 是一种实用的语言吗?

是的。

C++ 是一种实用的工具。]它不完美,但是有用。

在软件产业的世界里,C++被看作一种可靠的,成熟的,主流的工具。它得到普遍的工业支持,因而从一种全面的商业观点来看,它是“优秀”的。

[ Top | Bottom | Previous section | Next section ]

[6.2] C++ 是一种完美的语言吗?

不是。

C++的设计原意不是作为完美的面向对象语言的示范。它被设计为一种实用的工具,来解决现实世界的问题。它有少许的瑕疵,但是在完美之前就没有用的是纯理论的框架。而那不是C++的目标。

[ Top | Bottom | Previous section | Next section ]

[6.3] 面向对象(OO)有什么用?

面向对象技术是我们所知道的开发大型的,复杂的软件应用和系统的最佳方法。

OO:应付大型的,复杂的软件系统时,软件工业是“失败的”。但是这种“失败”实际上归因于我们的成功:我们的成功使得用户想要的更多。不幸的是我们创造了市场的饥渴,而“结构化”分析,设计和编程技术无法满足这种饥渴。因此需要我们创造一种更好的典范。

C++ 是一种面向对象(OO)的编程语言。C++ 也能够被当作传统的编程语言使用(作为“一种更好的 C”)。但是如果你“作为一种更好的C”来使用它,那么就不要期望得到面向对象所带来的好处。

[ Top | Bottom | Previous section | Next section ]

[6.4] C++ 比 Ada 更好吗?(或 Visual Basic, C, FORTRAN, Pascal, Smalltalk, 或其他语言?)

这样的问题没有意义。在对这个问题发表不同意见之前请先阅读下文。

99%的情况下,编程语言的选择是出于商业上的考虑,而不是技术上的考虑。真正重要的是如同开发机器的编程环境,配置机器的运行时环境,运行时和/或开发环境的许可证/合法执照,开发者,咨询服务,和企业文化/政策这些商业上的考虑,它们扮演的角色一般比编译期性能,运行时性能,静态还是动态类型,静态还是绑定等更为重要。

从纯粹的技术角度争论一种语言比另一种更好的人(也就是忽略占支配地位的商业论点的人),正是暴露了他们自己技术上的缺乏,别听他们的。

[ Top | Bottom | Previous section | Next section ]

[6.5] 谁在用 C++?

[Recently rewrote (on 7/00). ]Click here to go to the next FAQ in the "chain" of recent changes.]

很多很多公司和政府部门,非常多。

有大量的开发者(并且因此有大量的底层有效支持,包括卖主,工具开发者,培训等等)是]C++的特征之一

[ Top | Bottom | Previous section | Next section ]

[6.6] 学习 OO/C++ 需要多长时间?

一些公司成功地讲授标准的工业界的“短期课程”,将大学一学期的课程压缩到了一个星期40个小时。但是不论你在何处获得培训,要知道课程交给你的是元件,大多数人是在接手项目之后才将概念“凝结成形”,得以学成。即使得到最好的培训,也不是现成的。

精通OO/C++需要6-12个月。如果身边有专家的话,会少些。如果没有一个“好的”通用型的C++类库,则会多一些。成为可以指导别人的专家则需要3年。

有些人永远不行,除非你是可教的“儒子”并且有个人驱动力。可教的最低要求是,当你错了的时候必须能够承认。驱动力的最低要求是,你必须愿意投入一些额外的时间(学习一些新的东西比改变你的典范(paradigm)[也就是说,改变你思考的方法,改变良好的观念,改变你在技术世界中的思维模式]要容易的多)。

你应该做两件事:

]一个“高手”

看两类书:一类是 ]C++法律的指导, 另一类是 ]C++道德的指导

你不应该做两件事:

]不应该去学习 C 作为学习 OO/C++ 的台阶

]不应该去学习 Smalltalk 作为学习 OO/C++ 的台阶

[ Top | Bottom | Previous section | Next section ]

[6.7] 从商业角度看 C++ 有哪些特征?

从商业角度看 OO/C++ 有这样一些特征:

C++ 有]巨大的安置基础,这意味着你会有]很多厂商在工具,环境,咨询服务等上提供支持,而且你可以在你的履历上加上非常有价值的一条。

C++ 让开发者为软件块提供]简化的接口,以改善这些软件块被使用(重用)时的错误率。

C++ 通过]算符重载让你发掘开发者的直觉,降低重用用户的学习曲线。

C++ 将对软件块的]访问局部化,降低更改时的成本。

C++ 减少]安全性和可用性的权衡,改善使用(重用)软件块时的成本。

C++ 减少]安全性和速度的权衡,改善错误率而不丧失性能。

C++ 给你]继承和动态绑定,以便]旧的代码调用新的代码,使得针对市场的快速扩展/调整你的软件成为可能。

[ Top | Bottom | Previous section | Next section ]

[6.8] 虚函数(动态绑定)对于 OO/C++来说是主要的吗?

[Recently inserted "the" before "difference" thanks to Stan Brown and reworded references to STL (on 7/00). ]Click here to go to the next FAQ in the "chain" of recent changes.]

是的!

没有虚函数,C++ 就不是面向对象的了。算符重载和非虚成员函数很好,但毕竟,它们只是更典型的C概念中传递一个struct的指针给函数的句法装饰而已。虽然]标准库包含了许多模板以实现同样非常好的“泛型编程(译注:也称通用编程,"generic programming")”技术,但虚函数仍然是用C++进行面向对象编程的核心。

从商业角度看,如果没有虚函数,那么也就没有什么理由要从传统的 C 转移到C++了。(在本 FAQ中我们将忽略泛型编程和]标准库)。技术人员通常认为在C和非面向对象的C++之间有很大的区别,但如果没有面向对象,这个区别通常不足以证明培训开发者,新工具等的成本是值得的。换句话说,如果我被某个经理征询意见,是否从C转向非面向对象的C++(也就是说,转换语言而不转换典范),那么我可能会劝阻他这样做,除非有逼不得已的面向工具的原因。从商业角度看,面向对象能使系统具有可扩展性和可适应性,但只有C++类的语法而没有面向对象的话,就不会减少维护成本,而实际上会增加培训成本。

底线:没有虚函数的C++不是面向对象。用类编程而没有动态绑定则称为“基于对象”,而不是“面向对象”。踢出虚函数和踢出OO(译注:即面向对象)是一回事。所剩下的就是基于对象编程了,和最初的Ada语言类似(顺便说一下,新的Ada语言支持OO而不是基于对象编程了)。

[ Top | Bottom | Previous section | Next section ]

[6.9] 我来自密苏里州。你能给我一个理由,为什么虚函数(动态绑定)造成很大的不同?

总体来说:动态绑定能通过使旧的代码调用新的代码来提高重用。

在 OO(译注:即面向对象)之前,重用是通过使新的代码调用旧的代码来完成的。举例来说,程序员可以写一些代码来调用一些重用的代码,如 printf()。

在OO中,重用能够通过使旧的代码调用新的代码来完成。例如,程序员可以写一些代码被非常非常始祖的框架所调用。而不需要修改始祖的代码。事实上,甚至不需要被重新编译。即使源代码已经遗失了25年,你只有目标文件,那个原始的目标文件将会调用新的扩展的代码而不会遗失什么。

这是可扩展性,这是OO。

[ Top | Bottom | Previous section | Next section ]

[6.10] C++ 是否向下兼容 ANSI/ISO C?

差不多。

C++尽可能地兼容C,但不完全。在实践上,主要的区别是,C++需要原型,f()声明一个不带参数的函数(在 C 中,f()和f(...)是相同的)。

还有一些非常微小的差别,象在C++中sizeof('x')等于sizeof(char),而在 C 中等于sizeof(int)。同样,C++在同一个命名空间中放置结构"tags"作为其他名称,而在 C 中,需要显式的struct(举例来说,typedef struct Fred Fred;技巧当然也可以工作,但在C++中是多余的)。

[ Top | Bottom | Previous section | Next section ]

[6.11] C++ 标准化了吗?

[Recently changed "has been finalized" to "was finalized" thanks to Stan Brown (on 7/00). ]Click here to go to the next FAQ in the "chain" of recent changes.]

是的。

C++标准被ISO(国际标准化组织)和一些国家标准组织,如ANSI美国国家标准协会),BSI(英国标准协会),DIN(德国国家标准组织)所定稿和采用。ISO标准在1997年11月14日经投票一致被定稿和采用。

ANSI C++委员会被称为“X3J16”。ISO C++标准小组被称为“WG21”。ANSI/ISO C++标准的主要参与者几乎包含了每个人:有来自澳大利亚,加拿大,丹麦,法国,德国,爱尔兰,日本,荷兰,新西兰,瑞典,英国和美国的代表,连同大约一百多个公司的代表和感兴趣的个人。主要参与者包括AT&T,爱立信,Digital,Borland,惠普,IBM, Mentor Graphics,微软,Silicon Graphics,Sun Microsystems和西门子。经过大约8年的工作,标准完成了。在1997年11月14日,代表们出席了在莫里森镇的投票,标准被一致认可。

[ Top | Bottom | Previous section | Next section ]

[6.12] 何处能得到 ANSI/ISO C++ 标准的拷贝?

[Recently added URLs to free copies of CD2 (on 7/00) and total rewrite; changed several URLs thanks to Brian K. Hamon and Garen Parham (on 4/01). ]Click here to go to the next FAQ in the "chain" of recent changes.]

至少有三种方法得到这份文档的软拷贝:

$18 [ANSI出版]:到这一页,下拉选择“PDF file”,点击“Place this in your shopping basket”。

$18 [ANSI出版]:到这一页,并点击“Add to Basket”。

$245 [ISO出版]:到这一页并且点击“Add to Basket”。

注意:ISO文档比ANSI昂贵十倍多,但技术内容是一样的。ISO文档的扉页不同,但技术材料和ANSI文档是一样的。请不要email问我为什么ISO对于基本一样的东西收费这么多,那是ISO的商业决定;你必须向ISO的出版/销售部门认购。

至少有两种方法得到这份文档的硬拷贝:

$175 [ANSI出版]:到这一页,下拉选择“Hardcopy”,并点击“Place this in your shopping basket”。

未知价格 [ANSI出版]:致电 NCITS(National Committee for Information Technology Standards; 国家信息技术委员会;这是以前称为“X3”的组织的新名称)。联系人是 Monica Vega,202-626-5739 或 202-626-5738。寻求 FDC 14882文档。准备好支付一些钱——文档当然不是免费的。

还有两种潜在的有趣的(并且免费的)文档你也许想看:

$0:如果你愿意忍受一份(免费的)无授权的,过期的,并且部分错误的文档,您可以从“委员会草案#2”在这里和/或这里得到。

$0:ISO 委员会的新闻稿(不是 ANSI 或 ISO 标准的拷贝!) 在这里。这份新闻稿对于非程序员来说是易读的。

[ Top | Bottom | Previous section | Next section ]

E-mail the author

[ C++ FAQ Lite | Table of contents | Subject index | ]About the author | | ]Download your own copy ]

Revised Apr 8, 2001

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有