注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
模块复用——c++类、dll和com
获取ACCESS2000数据库中的所有表
C++语言常见问题解答(2)
C++语言常见问题解答(3)
C++语言常见问题解答(4)
在c++程序中重启自己的一种方法
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> C >> 文章正文
C++语言常见问题解答(1)
作者:中译者:叶秉哲  来源:永远的UNIX  点击:  更新:2006-12-19
简介:
。 
 
4/95 更新: 
 * 添加 BC++ Windows 方面常见的问题。 
 * 更改 NIHCL 的 ftp 位址。 
 * 添加解释:"ARM" 代表 "Annotated Reference Manual"。 
 
3/95 更新: 
 * 添加关於 "delete this" 的问题。 
 * 添加两则关於 iostreams 与 eof 的问题。 
 * 更正些 Gnu emacs 的 "c-mode" 和 "cc-mode" 的项目。 
 
1/95 更新: 
 * 此文件的中译版出来了;底下再详述之。 
 
12/94 更新: 
 * 添加关於 STL 的 FAQ(放在 #115)。 
 * 添加关於签名编码的 FAQ(放在 #119)。 
 * 更正「『成份』与『私有继承』之比较」这项 FAQ 里面的一些打字错误。 
 * 更正一些拼字错误。 
 
11/94 更新: 
 * 加入「FAQ 书」和「FAQ 文件」的区别资讯。 
 * 其他字面上的修饰。 
 
10/94 更新: 
 * 修正一些打字错误。 
 
9/94 更新: 
 * 一点文字上的修饰。 
 
8/94 更新: 
 * 加入 "typeid" 和 "dynamic_cast" 的新规定。 
 * 加入 "mutable" 和 "const_cast" 的新规定。 
 * 重写大部份的回答部份,使其更一致些。 
 * 原文的引号改为 "..." 而不是 `...' 或 ``...'' 。 
 * 有程式码例子的那一行以 TAB 起头;其他行则否。 
   【译注】本中译版以 8 个英文空白字元代替 TAB。 
 * 所有东西都编辑过了;到处都有小更动。 
 
 
======================= 
■□ 第1节:内容介绍 
======================= 
 
        DOCUMENT:    Frequently-Asked-Questions for comp.lang.c++ 
        REVISION:    Jan 31, 1996 
 
        文件不等於书本:这份 C++ FAQ 文件和「FAQ 书」是不一样的。“FAQ 书” 
                  ("C++ FAQs", Addison-Wesley, 1995) 是这篇文件的五倍大。 
                  底下有更详细的介绍。 
 
        AUTHOR:      Marshall P. Cline, Ph.D. 
                     Paradigm Shift, Inc. 
                     One Park St. / Norwood, NY  13668 
                     voice: 315-353-6100 
                     fax:   315-353-6110 
                     email: cline@parashift.com 
 
        COPYRIGHT:   Copyright (C), 1991-96 Marshall P. Cline, Ph.D. 
                     Permission to copy all or part of this work is granted, 
                     provided that the copies are not made or distributed 
                     for resale (except a nominal copy fee may be charged), 
                     and provided that the AUTHOR, COPYRIGHT, & NO WARRANTY 
                     sections are retained verbatim and are displayed 
                     conspicuously.  If anyone needs other permissions that 
                     aren't covered by the above, please contact the author. 
 
        NO WARRANTY: THIS WORK IS PROVIDED ON AN "AS IS" BASIS.  THE AUTHOR 
                     PROVIDES NO WARRANTY WHATSOEVER, EITHER EXPRESS OR 
                     IMPLIED, REGARDING THE WORK, INCLUDING WARRANTIES WITH 
                     RESPECT TO ITS MERCHANTABILITY OR FITNESS FOR ANY 
                     PARTICULAR PURPOSE. 
 
        版权声明:Copyright (C), 1991-96 Marshall P. Cline, Ph.D. 
                  复制本文件全部或部份的内容,若合乎下述诸项要求,则允许之 
                  :不得为转售之目的而制作或传播任何复制品(但可索取名义上 
                  的传播手续费),并且作者栏、版权声明及责任事项的部份,要 
                  一字不漏地、醒目地显示出来。若您需要此处未提及的授权事项 
                  ,请洽本作者。 
 
        责任事项:这份文件是供您参考用的。对於本作品可能造成的营利性、或任 
                  何特殊场合适用性之保障,作者概不负责,不论是否曾明白地指 
                  出或暗示。 
 
          【译注】上述的「版权声明」与「责任事项」译文,仅供参考,一切请以 
                  原文为准。译者对它们亦概不负责…… ;-> 
 
        文件取得方法:  旧的 FTP 地点不能用了。我正在寻找新的地点, 
                        请密切注意下个月的这个地方。 
                        请不要寄信来推荐新的地点(我的信箱会爆满的 :) 
 
          【译注】台湾使用者,请到以下地点,或其 AFS client 取得: 
                  ftp://NCTUCCCA.edu.tw/USENET/FAQ/comp/lang/c++/FAQ* 
 
        其他资讯:comp.lang.c FAQ 每个月都会出现在该讨论区中, 
                  该文件的维护者是 Steve Summit (scs@eskimo.com) 。 
 
        中文翻译:用 "Big5" 内码(在台湾最广为使用的 16 位元中文内码)储存 
                  的中文译文,可用 anonymous ftp 到以下地点取得: 
             ftp://ftp.cis.nctu.edu.tw/Documents/News/C-faq/c-cppfaq.zip 
 
================================= 
● 1A:「FAQ 书」与「FAQ 文件」 
================================= 
 
Addison-Wesley 已出版了由 Cline 与 Lomow 合著的 "C++ FAQs" (1995, ISBN 
0-201-58958-3) 一书,许多人对该书和这篇文件的关系感到好奇,一些没看过该书 
的人,也担心本文是否会和它相同。此处将回答这些问题。 
 
「FAQ 书」(於 Oct. 94 上市)大体上和本文的观念一致,但该书约为本文的5倍 
大,还包括了数千则交互参考资讯、参考资料、索引项目,及许多的程式例子。 
 
============= 
● 1B:目录 
============= 
 
========== POSTING #1 ========== 
 
第1节:内容介绍 
---------------- 
⊙1A:「FAQ 书」与「FAQ 文件」 
⊙1B:目录 
⊙1C:术语及常用的缩写 
 
第2节:我该如何参与讨论?(发信之前请务必一读) 
------------------------------------------------ 
Q1:我该在哪个讨论区中发问? 
Q2:我该怎麽提出「我的程式有毛病」的问题呢? 
 
第3节:周遭的、管理上的事项 
---------------------------- 
Q3:什麽是 OOP?什麽是 C++? 
Q4:C++ 的优点是什麽? 
Q5:谁在用 C++? 
Q6:有任何 C++ 标准化方案在进行吗? 
Q7:该到哪里索取最新的 ANSI-C++ 标准草案? 
Q8:C++ 对 ANSI-C 回溯相容吗? 
Q9:多久才能学会 C++? 
 
第4节:C++ 的基础 
------------------ 
Q10:什麽是类别(class)? 
Q11:什麽是物件(object)? 
Q12:什麽是参考(reference)? 
Q13:如果设定某值给参考会怎麽样? 
Q14:怎样才能将参考改设成别的物件? 
Q15:何时该用参考,何时又该用指标? 
Q16:行内函数是做什麽的? 
 
第5节:建构子和解构子 
---------------------- 
Q17:建构子(constructor)是做什麽的? 
Q18:怎样才能让建构子呼叫另一个同处一室的建构子? 
Q19:解构子(destructor)是做什麽的? 
 
第6节:运算子多载 
------------------ 
Q20:运算子多载(operator overloading)是做什麽的? 
Q21:哪些运算子可以/不能被多载? 
Q22:怎样做一个 "**"「次方」运算子? 
 
第7节:夥伴 
------------ 
Q23:夥伴(friend)是什麽? 
Q24:「夥伴」违反了封装性吗? 
Q25:夥伴函数的优缺点? 
Q26:「夥伴关系无继承及递移性」是什麽意思? 
Q27:应该替类别宣告个成员函数,还是夥伴函数? 
 
第8节:输入/输出: 和  
--------------------------------------------- 
Q28:该怎样替 "class Fred" 提供输出功能? 
Q29:为什麽我该用  而不是以前的 ? 
Q30:为什麽我处理输入时,会超过档案的结尾? 
Q31:为什麽我的程式执行完第一次回圈後,会对输入的要求不加理睬? 
Q32:在 DOS 及 OS/2 的 binary 模式下,要怎样来 "reopen" cin 及 cout? 
 
========== POSTING #2 ========== 
 
第9节:自由记忆体管理 
---------------------- 
Q33:"delete p" 会删去 "p" 指标,还是它指到的资料,"*p" ? 
Q34:我能 "free()" 掉由 "new" 配置到的、"delete" 掉由 "malloc()" 配置到的 
     记忆体吗? 
Q35:为什麽该用 "new" 而不是老字号的 malloc() ? 
Q36:为什麽 C++ 不替 "new" 及 "delete" 搭配个 "realloc()" ? 
Q37:我该怎样配置/释放阵列? 
Q38:万一我忘了将 "[]" 用在 "delete" 由 "new Fred[n]" 配置到的阵列,会发生 
     什麽事? 
Q39:成员函数做 "delete this" 的动作是合法的(并且是好的)吗? 
Q40:我该怎麽用 new 来配置多维阵列? 
Q41:C++ 能不能做到在执行时期才指定阵列的长度? 
Q42:怎样确保某类别的物件都是用 "new" 建立的,而非区域或整体/静态变数? 
 
第10节:除错与错误处理 
------------------------ 
Q43:怎样处理建构子的错误? 
Q44:如果建构子会丢出例外的话,该怎麽处理它的资源? 
 
第11节:Const 正确性 
---------------------- 
Q45:什麽是 "const correctness"? 
Q46:我该早一点还是晚一点让东西有常数正确性? 
Q47:什麽是「const 成员函数」? 
Q48:若我想在 "const" 成员函数内更新一个「看不见的」资料成员,该怎麽做? 
Q49:"const_cast" 会不会丧失最佳化的可能? 
 
第12节:继承 
-------------- 
Q50:「继承」对 C++ 来说很重要吗? 
Q51:何时该用继承? 
Q52:怎样在 C++ 中表现出继承? 
Q53:把衍生类别的指标转型成指向它的基底,可以吗? 
Q54:Derived* --> Base* 是正常的;那为什麽 Derived** --> Base** 则否? 
Q55:衍生类别的阵列「不是」基底的阵列,是否表示阵列不好? 
 
⊙12A:继承--虚拟函数 
Q56:什麽是「虚拟成员函数」? 
Q57:C++ 怎样同时做到动态系结和静态型别? 
Q58:衍生类别能否将基底类别的非虚拟函数覆盖(override)过去? 
Q59:"Warning: Derived::f(int) hides Base::f(float)" 是什麽意思? 
 
⊙12B:继承--一致性 
Q60:我该遮蔽住由基底类别继承来的公共成员函数吗? 
Q61:圆形 "Circle" 是一种椭圆 "Ellipse" 吗? 
Q62:对「圆形是/不是一种椭圆」这两难问题,有没有其他说法? 
 
⊙12C:继承--存取规则 
Q63:为什麽衍生的类别无法存取基底的 "private" 东西? 
Q64:"public:"、"private:"、"protected:" 的差别是? 
Q65:当我改变了内部的东西,怎样避免子类别被破坏? 
 
⊙12D:继承--建构子与解构子 
Q66:若基底类别的建构子呼叫一个虚拟函数,为什麽衍生类别覆盖掉的那个虚拟函 
     数却不会被呼叫到? 
Q67:衍生类别的解构子应该外显地呼叫基底的解构子吗? 
 
⊙12E:继承--Private 与 protected 继承 
Q68:该怎麽表达出「私有继承」(private inheritance)? 
Q69:「私有继承」和「成份」(composition) 有多类似? 
Q70:我比较该用哪一种:成份还是私有继承? 
Q71:我应该用指标转型方法,把「私有」衍生类别转成它的基底吗? 
Q72:保护继承 (protected inheritance) 和私有继承有何关连? 
Q73:"private" 和 "protected" 的存取规则是什麽? 
 
第13节:抽象化(abstraction) 
------------------------------- 
Q74:分离介面与实作是做什麽用的? 
Q75:在 C++ 里,我该怎样分离介面与实作(像 Modula-2 那样)? 
Q76:ABC ("abstract base class") 是什麽? 
Q77:「纯虚拟」(pure virtual) 成员函数是什麽? 
Q78:怎样替整个类别阶层提供列印的功能? 
Q79:何时该把解构子弄成 virtual? 
Q80:虚拟建构子 (virtual constructor) 是什麽? 
 
========== POSTING #3 ========== 
 
第14节:程式风格指导 
---------------------- 
Q81:有任何好的 C++ 程式写作的标准吗? 
Q82:程式撰写标准是必要的吗?有它就够了吗? 
Q83:我们的组织该以以往 C 的经验来决定程式撰写标准吗? 
Q84:我该在函数中间或是开头来宣告区域变数? 
Q85:哪一种原始档命名惯例最好? "foo.C"? "foo.cc"? "foo.cpp"? 
Q86:哪一种标头档命名惯例最好? "foo.H"? "foo.hh"? "foo.hpp"? 
Q87:C++ 有没有像 lint 那样的指导原则? 
 
第15节:Smalltalk 程式者学习 C++ 之钥 
--------------------------------------- 
Q88:为什麽 C++ 的 FAQ 有一节讨论 Smalltalk?这是用来攻击 Smalltalk 的吗? 
Q89:C++ 和 Smalltalk 的差别在哪? 
Q90:什麽是「静态型别」?它和 Smalltalk 有多相似/不像? 
Q91:「静态型别」与「动态型别」哪一种比较适合 C++? 
Q92:怎样分辨某个 C++ 物件程式库是否属於动态型别的? 
Q93:在 C++ 里怎样用继承?它和 Smalltalk 有何不同? 
Q94:Smalltalk/C++ 不同的继承,在现实里导致的结果是什麽? 
Q95:学过「纯种」的 OOPL 之後才能学 C++ 吗? 
Q96:什麽是 NIHCL?到哪里拿到它? 
 
第16节:参考与数值语意 
------------------------ 
Q97:什麽是数值以及参考语意?哪一种在 C++ 里最好? 
Q98:「虚拟资料」是什麽?怎麽样/为什麽该在 C++ 里使用它? 
Q99:虚拟资料和动态资料有何差别? 
Q100:我该正常地用指标来配置资料成员,还是该用「成份」(composition)? 
Q101:动态配置成员物件有三个效率因素,它们的相对代价是多少? 
Q102:"inline virtual" 的成员函数真的会被 "inline" 吗? 
Q103:看起来我不应该用参考语意了,是吗? 
Q104:参考语意效率不高,那麽我是否应该用传值呼叫? 
 
========== POSTING #4 ========== 
 
第17节:和 C 连结/和 C 的关系 
-------------------------------- 
Q105:怎样从 C++ 中呼叫 C 的函数 "f(int,char,float)"? 
Q106:怎样才能建一个 C++ 函数 "f(int,char,float)",又能被 C 呼叫? 
Q107:为什麽 linker 有这种错误讯息:C/C++ 函数被 C/C++ 函数呼叫到? 
Q108:该怎麽把 C++ 类别的物件传给/传自 C 的函数? 
Q109:C 的函数能不能存取 C++ 类别的物件资料? 
Q110:为什麽我总觉得 C++ 让我「离机器更远了」,不像 C 那样? 
 
第18节:指向成员函数的指标 
---------------------------- 
Q111:「指向成员函数的指标」和「指到函数的指标」的型态有差别吗? 
Q112:怎样把指向成员函数的指标传给 signal handler、X event callback 等等? 
Q113:当我想以成员函数做为中断服务常式 (ISR) 时,为什麽编译器产生(型态不 
      符)的错误? 
Q114:为什麽我取不出 C++ 函数的位址? 
Q115:怎样宣告指向成员函数的指标阵列? 
 
第19节:容器类别与 template 
----------------------------- 
Q116:怎样自一个连结串列/杂凑表等等里面,插入/存取/改变元素? 
Q117:「样版」(template)的用意是什麽? 
Q118:"function template" 的语法/语意是什麽? 
Q119:"class template" 的语法/语意是什麽? 
Q120:什麽是「参数化型别」(paramet

上一页  [1] [2] [3] [4] [5] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务