书籍详情
C++经典问答
作者:(美)Marshall Cline等著;周远成译;周远成译
出版社:中国电力出版社
出版时间:2003-05-01
ISBN:9787508308685
定价:¥55.00
购买这本书可以去
内容简介
本书通过一种简明而直接的问-,答方式,为你提供了400多种编程问题的解决方案,使你能够轻松地面对来自实际工作中的各种挑战,以最高效率的完成工作。书中所有的内容都符合最新的ANSI/ISO C++ 标准。这些内容包括了有关C++的一些语法变化比如:mutable语法,和一些重大的改变比如:RTTI 、namespaces以及C++标准类库的更新。此外,本书还讨论了Java、CORBA、COM/COM+和C++的关系。
作者简介
Marshall Cline是MT系统公司的总裁,该公司为大的企业开发面向对象系统。他曾向从事工业和研究的数千名专业人士讲授面向对象编程的设计和分析。他是官方的C++FAQ网上论坛comp.lanf.C++的管理员,获得了Clarkson大学电气与计算机工程专业的博士学位。
目录
致谢</font><br></font><br>第1部分 开端</font><br></font><br>第1章 介绍</font><br></font><br>FAQ1.01:这一章的目的是什么?</font><br>FAQ1.02:C++FAQs是什么?</font><br>FAQ1.03:谁是这本书的目标读者?</font><br>FAQ1.04:这是一本纯粹关于C++的书吗?</font><br>FAQ1.05:为什么开发人员需要一个C++和OO技术的指导书?</font><br>FAQ1.06:在对这些FAQs的解答方面需要给出什么种类的指导?</font><br>FAQ1.07:电子FAQ是什么?当电子FAQ可免费得到时为什么要买这本书?</font><br>FAQ1.08:假如你已有一本该书的第一版,为什么你应该买这一版?</font><br>FAQ1.09:在这本书里都使用哪些规约?</font><br></font><br>第2章 基本的C++语法和语义学</font><br></font><br>FAQ2.01:这一章的目的是什么?</font><br>FAQ2.02:Main()的要点是什么?</font><br>FAQ2.03:函数的要点是什么?</font><br>FAQ2.04:缺省参数的要点是什么?</font><br>FAQ2.05:局部(自动)对象的要点是什么?</font><br>FAQ2.06:使用明确的参数构造对象的要点是什么?</font><br>FAQ2.07:动态分配(new)对象的要点是什么?</font><br>FAQ2.08:在内部作用域内的局部对象的要点是什么?</font><br>FAQ2.09:通过引用传递对象的要点是什么?</font><br>FAQ2.10:通过数值传递对象的要点是什么?</font><br>FAQ2.11:通过指针传递对象的要点是什么?</font><br>FAQ2.12:输出流的要点是什么?</font><br>FAQ2.13:输入流的要点是什么?</font><br>FAQ2.14:使用包含重载运算符的类的要点是什么?</font><br>FAQ2.15:使用容器类的要点是什么?</font><br>FAQ2.16:创建类头文件的要点是什么?</font><br>FAQ2.17:定义一个类的要点是什么?</font><br>FAQ2.18:定义成员函数的要点是什么?</font><br>FAQ2.19:往一个类增加一个构造函数的要点是什么?</font><br>FAQ2.20:往一个类增加一个析构函数的要点是什么?</font><br>FAQ2.21:定义一个包含指向堆中对象的指针的类的要点是什么?</font><br>FAQ2.22:全局对象的要点是什么?</font><br>FAQ2.23:抛掷和捕捉异常的要点是什么?</font><br>FAQ2.24:继承和动态绑定的要点是什么?</font><br></font><br>第3章 领会管理观点</font><br></font><br>FAQ3.01:这一章的目的是什么?</font><br>FAQ3.02:这一章(和这本书)的核心要旨是什么?</font><br>FAQ3.03:为什么是经理而不是懂技术的开发人员负责?</font><br>FAQ3.04:某人如何能管理他们不熟悉的某事?</font><br>FAQ3.05:关于C++和OO设计的最普通的错误是什么?</font><br>FAQ3.06:"Peter软件原理"是什么?</font><br>FAQ3.07:一个机构应该在所有它的项目上使用OO吗?</font><br>FAQ3.08:在OO离去之前能忽略它吗?</font><br>FAQ3.09:什么样的OO语言是最好的?</font><br>FAQ3.10:对过程和工具来说正确的方法是什么?</font><br>FAQ3.11:就现货供应的类库和框架来说正确的方法是什么?</font><br></font><br>第4章 体系结构观点</font><br></font><br>FAQ4.01:这一章的目的是什么?</font><br>FAQ4.02:软件体系结构为什么是重要的?</font><br>FAQ4.03:体系结构应该以什么为基础,是被解决的问题还是问题域?</font><br>FAQ4.04:软件体系结构应基于问题的策略吗?</font><br>FAQ4.05:客户可能改变他们的要求吗?</font><br>FAQ4.06:稳定的要求是令人满意的吗?</font><br>FAQ4.07:打算变化的关键是什么?</font><br>FAQ4.08:框架是什么?</font><br>FAQ4.09:由框架表现的"控制的倒置"是什么?</font><br>FAQ4.10:一个可扩充的特定域的框架是什么?</font><br>FAQ4.11:什么特点使得一个框架可扩充的然而又是特定域的?</font><br>FAQ4.12:假如域分析不正确,那么会发生什么?</font><br>FAQ4.13:应该花费多少努力来支持变化--即,可扩充性值多少钱?</font><br>FAQ4.14:一个设计师是如何使得软件体系结构具有弹性的?</font><br>FAQ4.15:实现重复使用的秘密是什么?</font><br></font><br>第二部分 面向对象的设计</font><br></font><br>第5章 面向对象的基本原理</font><br></font><br>FAQ5.01:这一章的目的是什么?</font><br>FAQ5.02:为什么人类要采用OO技术?</font><br>FAQ5.03:为OO程序设计而使用C++的一些益处是什么?</font><br>FAQ5.04:面向对象技术的基本概念是什么?</font><br>FAQ5.05:为什么类是重要的?</font><br>FAQ5.06:一个对象是什么?</font><br>FAQ5.07:一个对象理想的特性是什么?</font><br>FAQ5.08:类如何好于过程软件的三个基本的组合块?</font><br>FAQ5.09:合成的目的是什么?</font><br>FAQ5.10:继承的目的是什么?</font><br>FAQ5.11:多态性和动态绑定的优点是什么?</font><br>FAQ5.12:如何OO有助于产生弹性的和可扩充的软件?</font><br>FAQ5.13:如何老代码调用新代码?</font><br>FAQ5.14:抽象是什么?为什么它是重要的?</font><br>FAQ5.15:抽象应该是以用户为中心还是以开发人员为中心?</font><br>FAQ5.16:封装和抽象之间的区别是什么?</font><br>FAQ5.17:封装一个坏的抽象的后果是什么?</font><br>FAQ5.18:把界面和实现分开的意义是什么?</font><br>FAQ5.19:把界面和实现分开如何能改善性能以及弹性?</font><br>FAQ5.20:对一个抽象产生一个合适的界面,最好的方法是什么?</font><br>FAQ5.21:Get/set成员函数是如何与蹩脚的设计的界面相关的?</font><br>FAQ5.22:每一个成员数据都应该有一个get和set成员函数吗?</font><br>FAQ5.23:一个类的真正的目的是输出数据吗?</font><br>FAQ5.24:OO应该被认为以数据为中心吗?</font><br></font><br>第6章 可觉察的行为的说明</font><br></font><br>FAQ6.01:这一章的目的是什么?</font><br>FAQ6.02:一个成员函数的用户应该依靠代码实际做的还是说明?</font><br>FAQ6.03:依靠说明而不是实现的优点是什么?</font><br>FAQ6.04:什么是通告要求和通告承诺?</font><br>FAQ6.05:如何精确确定成员函数的通告要求和通告承诺?</font><br>FAQ6.06:在没有使用说明的开发组织里为什么害怕变化?</font><br>FAQ6.07:开发人员如何决定是否一个建议的变化将干扰原有的代吗?</font><br>FAQ6.08:在一个说明里一个可替代的(向后兼容的)变化的特性是什么?</font><br>FAQ6.09:如何能表明一个成员函数的实现履行了它的说明?</font><br>FAQ6.10:保持说明与代码同步是可能的吗?</font><br></font><br>第7章 合适的继承</font><br></font><br>FAQ7.01:什么是合适的继承?</font><br>FAQ7.02:合适继承的益处是什么?</font><br>FAQ7.03:不合适的继承是什么?</font><br>FAQ7.04:合适的和不合适的继承之间的不同不是明显的吗?</font><br>FAQ7.05:替代性是基于代码所做的还是代码将要做的说明许诺?</font><br>FAQ7.06:废除(隐藏)一个继承的public:成员函数合适吗?</font><br>FAQ7.07:什么是专门化?</font><br>FAQ7.08:子集和合适的继承有什么联系?</font><br></font><br>第8章 检测并修改不合适的继承</font><br></font><br>FAQ8.01:不合适的继承能破坏一个项目吗?</font><br>FAQ8.02:学会如何避免不合适的继承的最好方法是什么?</font><br>FAQ8.03:直觉是一个理解合适的继承的可依靠的向导吗?</font><br>FAQ8.04:驼鸟是一种鸟吗?</font><br>FAQ8.05:一个覆盖虚拟函数应该抛掷一个异常吗?</font><br>FAQ8.06:一个覆盖虚拟函数可以是空操作吗?</font><br>FAQ8.07:为什么C++使得修改Ostrich/Bird窘境如此困难?</font><br>FAQ8.08:Circle应该从Ellipse上继承吗?</font><br>FAQ8.09:关于非对称圆的窘境我们能做些什么?</font><br>FAQ8.10:在这些FAQs里好象不消失的一个问题是什么?</font><br>FAQ8.11:Stack应该从List继承吗?</font><br>FAQ8.12:代码重用是继承的主要目的吗?</font><br>FAQ8.13:东西的容器是一种任何东西的容器吗?</font><br>FAQ8.14:假定水果袋允许放进任何种类的水果,苹果袋是一种水果袋吗?</font><br>FAQ8.15:停放小汽车的停车区是一种停放任意的运载工具的停车区吗(假定停放运载工具的停车区允许放任意种类的运载工具)?</font><br>FAQ8.16:Derived的数组是一种Base的数组吗?</font><br>FAQ8.17:Derived数组能作为Base数组传递这一事实意味着数组是坏的吗?</font><br></font><br>第9章 错误处理策略</font><br></font><br>FAQ9.01:错误处理是根本过失的一个主要来源吗?</font><br>FAQ9.02:用C++如何对运行时错误进行处理?</font><br>FAQ9.03:在抛掷/捕捉过程期间对于在展开的栈帧里面的对象会发生什么?</font><br>FAQ9.04:一个异常说明是什么?</font><br>FAQ9.05:为错误处理而使用返回码的缺点是什么?</font><br>FAQ9.06:Throw…catch的优点是什么?</font><br>FAQ9.07:把正常逻辑从异常处理逻辑中分开是有帮助的,这是为什么?</font><br>FAQ9.08:使用异常处理的最困难部分是什么?</font><br>FAQ9.09:一个函数应该什么时候抛掷一个异常?</font><br>FAQ9.10:对于异常对象的体系来讲什么是最好的方法?</font><br>FAQ9.11:异常类应该如何来命名?</font><br>FAQ9.12:setjmp和longjmp适合于C++的什么地方?</font><br></font><br>第10章 测试策略</font><br></font><br>FAQ10.01:这一章的目的是什么?</font><br>FAQ10.02:自测对象的优点是什么?</font><br>FAQ10.03:人们不把自测加进他们的对象所使用的一些通常借口是什么?</font><br>FAQ10.04:假如不使用在这里描述的技术将会发生什么情况?</font><br>FAQ10.05:什么时候一个类是正确的?</font><br>FAQ10.06:什么是行为自测?</font><br>FAQ10.07:一个类的不变式是指什么?</font><br>FAQ10.08:为什么应明确地捕获不变式?</font><br>FAQ10.09:什么时候应该调用testInvariant()成员函数?</font><br>FAQ10.10:我们能做些什么来确保一个对象不被一个未开化的指针吹走?</font><br></font><br>第三部分 语言功能</font><br></font><br>第11章 引用</font><br></font><br>FAQ11.01:什么是一个引用?</font><br>FAQ11.02:"引用物"意味着什么?</font><br>FAQ11.03:什么时候能把一个引用与它的引用物连接起来?</font><br>FAQ11.04:当把一个值赋给一个引用时会发生什么?</font><br>FAQ11.05:什么是一个局部引用?</font><br>FAQ11.06:返回一个引用意味着什么?</font><br>FAQ11.07:利用一个引用的地址的结果是什么?</font><br>FAQ11.08:一个引用能指向一个不同的引用物吗?</font><br>FAQ11.09:当指针能做引用能做的所有事情时,为什么要使用引用?</font><br>FAQ11.10:引用不恰恰是伪装的指针吗?</font><br>FAQ11.11:什么时候需要指针?</font><br>FAQ11.12:为什么一些人憎恨引用?</font><br>FAQ11.13:int& const x有意义吗?</font><br></font><br>第12章 New和Delete</font><br></font><br>FAQ12.01:New比分配内存做得更多吗?</font><br>FAQ12.02:为什么说new好于可靠的老的值得信赖的malloc()?</font><br>FAQ12.03:C++有一个陪伴new和delete的realloc()相当物吗?</font><br>FAQ12.04:从new返回的指针能用free()解除分配吗?从malloc()返回的指针能用delete解除分配吗?</font><br>FAQ12.05:delete p删除指针p还是引用物*p?</font><br>FAQ12.06:应该检查从new Fred()返回的指针以便发现是否它是NULL吗?</font><br>FAQ12.07:如何能把new转换成返回NULL而不是抛掷一个异常?</font><br>FAQ12.08:如何创造new使之当内存用到下限时自动地刷新再循环对象池?</font><br>FAQ12.09:当p是NULL时如果调用delete p会发生什么?</font><br>FAQ12.10:当删除一个指针两次时会发生什么?</font><br>FAQ12.11:如何能分配和解除分配一个对象数组?</font><br>FAQ12.12:假如使用delete p(不是delete[] p)来删除一个通过new Fred[n]分配的数组将会怎样?</font><br>FAQ12.13:当p指向某种固有类型比如char的数组时能省略delete[] p中的[]吗?</font><br>FAQ12.14:如何在一个预定的内存位置建立一个对象?</font><br>FAQ12.15:类Fred如何保证仅仅用new而不是在栈上创建Fred对象?</font><br>FAQ12.16:如何破坏由布局new创建的对象?</font><br>FAQ12.17:在p = new Fred()里,假如Fred构造函数抛掷一个异常,Fred内存会"泄漏"吗?</font><br>FAQ12.18:对于一个成员函数表达delete this是合法(和可能)的吗?</font><br>FAQ12.19:在p = new[n]之后,在delete[] p期间编译程序如何知道n要破坏个对象?</font><br></font><br>第13章 Inline函数</font><br></font><br>FAQ13.01:Inline函数的目的是什么?</font><br>FAQ13.02:关键字"inlin"和"inlined"功能之间的联系是什么?</font><br>FAQ13.03:关于直接插入有任何特殊的规则吗?</font><br>FAQ13.04:一次定义规则(ODR)是什么?</font><br>FAQ13.05:就inline函数来说一些性能考虑是什么?</font><br>FAQ13.06:直接插入函数能改善性能吗?</font><br>FAQ13.07:直接插入函数能增加可执行代码的大小吗?</font><br>FAQ13.08:为什么当第一次编写代码时不应做直接插入决定?</font><br>FAQ13.09:当一个程序员使用一个从第三方获得的直接插入函数时会发生什么?</font><br>FAQ13.10:Inline和非inline代码之间的转换有没有容易的方法?</font><br></font><br>第14章 Const正确性</font><br></font><br>FAQ14.01:如何看懂指针的声明?</font><br>FAQ14.02:C++程序员如何避免对对象作出不期望的变化?</font><br>FAQ14.03:Const意味着运行时间的经常开支吗?</font><br>FAQ14.04:Const允许编译程序产生更有效的代码吗?</font><br>FA Q14.05:Const正确性是冗长乏味的吗?</font><br>FAQ14.06:为什么实施const正确性应该尽早而不尽晚?</font><br>FAQ14.07:检查程序和变态程序之间的区别是什么?</font><br>FAQ14.08:什么时候一个成员函数应该声明为const?</font><br>FAQ14.09:Const是应用到对象的位状态还是它的抽象状态?</font><br>FAQ14.10:在声明形参方面什么时候不应使用const?</font><br>FAQ14.11:在声明一个函数返回类型方面什么时候不应使用const?</font><br>FAQ14.12:在一个const成员函数内如何修改"不能观察到的"数据成员?</font><br>FAQ14.13:即使对它有一个const引用(指针)能合法地改变一个对象吗?</font><br>FAQ14.14:Const_cast意味着失去优化机会吗?</font><br></font><br>第15章 名称空间</font><br></font><br>FAQ15.01:这一章的目的是什么?</font><br>FAQ15.02:名称空间是什么?</font><br>FAQ15.03:在名称空间外的代码如何能使用在那个名称空间内声明的名字?</font><br>FAQ15.04:假如两个名称空间包含相同的名字将会发生什么?</font><br>FAQ15.05:使用名称空间的一些规则是什么?</font><br>FAQ15.06:名字查找是什么?</font><br>FAQ15.07:使用来自名称空间特别是标准名称空间的名字的各种技术之间的折衷</font><br>办法是什么?</font><br>FAQ15.08:名称空间能中断代码吗?</font><br>FAQ15.09:名称空间有任何其它的应用吗?</font><br>FAQ15.10:名称空间如何解决长标识符的问题?</font><br></font><br>第16章 使用static</font><br></font><br>FAQ16.01:这一章的目的是什么?</font><br>FAQ16.02:什么是静态类成员?</font><br>FAQ16.03:什么是静态数据成员的一个类比?</font><br>FAQ16.04:Inline函数能安全地访问静态数据成员吗?</font><br>FAQ16.05:什么是静态成员函数的一个类比?</font><br>FAQ16.06:静态数据成员是如何类似全局变量的?</font><br>FAQ16.07:静态成员函数是如何类似于友元函数的?</font><br>FAQ16.08:什么是指定的构造函数习语?</font><br>FAQ16.09:应该如何调用静态成员函数?</font><br>FAQ16.10:为什么带有静态数据成员的类可能得到连接程序错误?</font><br>FAQ16.11:如何初始化const静态数据成员?</font><br>FAQ16.12:实现需要维护调用之间的状态的一个函数的正确策略是什么?</font><br>FAQ16.13:函数调用运算符如何能帮助函数类?</font><br>FAQ16.14:忽略静态初始化次序问题是安全的吗?</font><br>FAQ16.15:解决静态初始化次序问题的简单而又健壮的办法是什么?</font><br>FAQ16.16:假如静态对象的析构函数有最后一定要出现的副作用将怎么办?</font><br>FAQ16.17:假如静态对象的析构函数有最终一定发生的重要的副作用并且另一个</font><br>静态对象的析构函数必须访问该静态对象将怎么办?</font><br>FAQ16.18:所有这些各种技术间的选择准则是什么?</font><br></font><br>第17章 派生类</font><br></font><br>FAQ17.01:这一章的目的是什么?</font><br>FAQ17.02:C++如何表达继承?</font><br>FAQ17.03:什么是一个具体的派生类?</font><br>FAQ17.04:为什么一个派生类不能访问它的基类的private:成员?</font><br>FAQ17.05:基类如何能保护派生类以致于基类的变化将不影响它们?</font><br>FAQ17.06:能把一个派生类指针转变为它的公共基类的指针吗?</font><br>FAQ17.07:一个类Y如何既能是另一个类X的子类又能得到X的存储单元?</font><br>FAQ17.08:不用使Y成为X的子类如何类Y能获得当前的类X的存储单元?</font><br>FAQ17.09:不继承X的存储单元Y类如何能是X类的子类?</font><br></font><br>第18章 访问控制</font><br></font><br>FAQ18.01:这一章的目的是什么?</font><br>FAQ18.02:Private:protected:和public:是如何不同的?</font><br>FAQ18.03:为什么子类不能访问它们基类的private:部分?</font><br>FAQ18.04:关键字struct和class之间有什么不同?</font><br>FAQ18.05:什么时候一个数据成员应该是protected:而不是private:?</font><br>FAQ18.06:为什么private:是类的缺省访问权限?</font><br></font><br>第19章 友元类和友元函数</font><br></font><br>FAQ19.01:朋友是什么?</font><br>FAQ19.02:关于友元类的好的智力模型是什么?</font><br>FAQ19.03:使用友元类的一些优点是什么?</font><br>FAQ19.04:朋友违反封装屏障吗?</font><br>FAQ19.05:一个友元函数是什么?</font><br>FAQ19.06:什么时候应该把一个函数实现为一个友元函数而不是一个成员函数?</font><br>FAQ19.07:保证合适地使用友元函数的一些方针是什么?</font><br>FAQ19.08:友谊不能传递这意味着什么?</font><br>FAQ19.09:友谊不能继承这意味着什么?</font><br>FAQ19.10:朋友不能是虚拟的这意味着什么?</font><br>FAQ19.11:什么特点建议使用一个友元函数而不是一个成员函数?</font><br>FAQ19.12:友元函数应被声明在一个类的private:、protected:还是public:部分?</font><br>FAQ19.13:什么是一个私有类?</font><br>FAQ19.14:如何输出一个类的对象?</font><br>FAQ19.15:一个类的对象如何接受流输入?</font><br></font><br>第20章 构造函数和析构函数</font><br></font><br>FAQ20.01:构造函数的目的是什么?</font><br>FAQ20.02:C++的构造函数的规则是什么?</font><br>FAQ20.03:析构函数的目的是什么?</font><br>FAQ20.04:C++的析构函数的规则是什么?</font><br>FAQ20.05:当执行一个析构函数时会发生什么?</font><br>FAQ20.06:拷贝构造函数的目的是什么?</font><br>FAQ20.07:什么时候调用一个拷贝构造函数?</font><br>FAQ20.08:什么是"缺省构造函数"?</font><br>FAQ20.09:一个构造函数应该调用另一个构造函数作为一个原语吗?</font><br>FAQ20.10:一个派生类的析构函数必须明确地调用它的基类的析构函数吗?</font><br>FAQ20.11:在它的函数结束之前如何解除一个局部对象?</font><br>FAQ20.12:为一个类提供直观的多重的构造函数的好方法是什么?</font><br>FAQ20.13:当一个基类的构造函数调用一个虚拟函数时,为什么不调用覆盖函数?</font><br>FAQ20.14:当一个基类的析构函数调用一个虚拟函数时,为什么不调用覆盖函数?</font><br>FAQ20.15:布局new的目的是什么?</font><br></font><br>第21章 虚拟函数</font><br></font><br>FAQ21.01:这一章的目的是什么?</font><br>FAQ21.02:什么是一个虚拟成员函数?</font><br>FAQ21.03:和调用一个正常的函数相比,调用一个虚拟函数要花费多大?</font><br>FAQ21.04:当支持动态绑定的时候C++如何执行静态定型?</font><br>FAQ21.05:析构函数可能是虚拟的吗?</font><br>FAQ21.06:一个虚拟析构函数的目的是什么?</font><br>FAQ21.07:什么是一个虚拟的构造函数?</font><br>FAQ21.08:当一个构造函数或者析构函数在它的对象里调用一个虚拟函数时应该使用什么语法?</font><br>FAQ21.09:当调用虚拟成员函数时应该使用作用域运算符∷吗?</font><br>FAQ21.10:什么是一个纯虚拟成员函数?</font><br>FAQ21.11:在声明一个纯虚拟函数的类内能定义它吗?</font><br>FAQ21.12:当它没有代码时如何定义一个虚拟析构函数?</font><br>FAQ21.13:一个ABC能有一个纯虚拟析构函数吗?</font><br>FAQ21.14:如何阻止编译程序产生直接插入虚拟函数的重复轮廓的拷贝?</font><br>FAQ21.15:带有虚拟函数的一个类至少有一个非直接插入的虚拟函数吗?</font><br></font><br>第22章 初始化表</font><br></font><br>FAQ22.01:什么是构造函数的初始化表?</font><br>FAQ22.02:假如没有使用构造函数初始化表将会发生什么?</font><br>FAQ22.03:在构造函数的定义里使用初始化表的原则是什么?</font><br>FAQ22.04:在构造函数的体内什么也没有,这是正常的吗?</font><br>FAQ22.05:如何初始化一个const数据成员?</font><br>FAQ22.06:如何初始化一个引用数据成员?</font><br>FAQ22.07:初始化表达式是以它们出现在初始化表的顺序而被执行的吗?</font><br>FAQ22.08:在一个构造函数的初始化表里如何安排初始化表达式?</font><br>FAQ22.09:在构造函数的初始化表里使用一个成员对象来初始化另一个成员对象是可能的吗?</font><br>FAQ22.10:假如某一个成员对象必须使用另一个成员对象来初始化它自己将怎么办?</font><br>FAQ22.11:对"在一个初始化表里初始化所有成员对象"的规则有一个例外吗?</font><br>FAQ22.12:如何用明确的初始表达式来初始化一个对象数组?</font><br></font><br>第23章 运算符重载</font><br></font><br>FAQ23.01:重载运算符象正常的函数吗?</font><br>FAQ23.02:什么时候应该使用运算符重载?</font><br>FAQ23.03:什么样的运算符不能重载?</font><br>FAQ23.04:使类更易于理解是运算符重载的目的吗?</font><br>FAQ23.05:为什么下标运算符通常成对出现?</font><br>FAQ23.06:对于十二、十和二这样的运算符,最重要的考虑是什么?</font><br>FAQ23.07:如何区分operator++的前缀和后缀两种形式?</font><br>FAQ23.08:operator++的前缀和后缀形式应该返回什么?</font><br>FAQ23.09:一个象矩阵的类如何能产生一个带有两个以上下标的下标运算符?</font><br>FAQ23.10:一个**运算符能当作一个指数运算符吗?</font><br></font><br>第24章 赋值运算符</font><br></font><br>FAQ24.01:赋值运算符应该返回什么?</font><br>FAQ24.02:自己给自己赋值的对象有什么错?</font><br>FAQ24.03:关于自我赋值应该做些什么?</font><br>FAQ24.04:在部分地赋值一个对象之后一个赋值运算符应该抛掷一个异常吗?</font><br>FAQ24.05:在一个ABC中应该如何声明赋值运算符?</font><br>FAQ24.06:什么时候一个用户定义的赋值运算符应该模仿编译程序将自动产生的赋值运算符?</font><br>FAQ24.07:Private:和protected:赋值运算符应该返回什么?</font><br>FAQ24.08:增加编译程序合成的赋值运算符将是正确的可能性的技术存在吗?</font><br>FAQ24.09:在一个派生类内的赋值运算符应该如何行为?</font><br>FAQ24.10:一个ABC的赋值运算符能够是虚拟的吗?</font><br>FAQ24.11:假如基类的赋值运算符是虚拟的那么派生类应该做什么?</font><br>FAQ24.12:赋值运算符应该通过使用布局new和拷贝构造函数来实现吗?</font><br></font><br>第25章 模板</font><br></font><br>FAQ25.01:模板的目的是什么?</font><br>FAQ25.02:类模板的语法和语义是什么?</font><br>FAQ25.03:如何对模板类特殊化以便处理特殊的情况?</font><br>FAQ25.04:函数模板的语法和语义是什么?</font><br>FAQ25.05:一个模板应该使用memcpy()来拷贝它的模板变元的对象吗?</font><br>FAQ25.06:当一个模板在它的内部使用另一个模板时为什么编译程序抗议>>?</font><br></font><br>第26章 异常策略</font><br></font><br>FAQ26.01:什么东西放在一个try块内?</font><br>FAQ26.02:什么时候一个函数应该捕获一个异常?</font><br>FAQ26.03:一个catch块应该完全地从一个错误中恢复过来吗?</font><br>FAQ26.04:构造函数如何处理一个错误?</font><br>FAQ26.05:笨蛋对象是什么(为什么应该避免它们)?</font><br>FAQ26.06:假如一个对象的某一成员对象在它的构造函数期间能够抛掷一个异常,该对象应该做些什么?</font><br>FAQ26.07:当析构函数失败时它们应该抛掷异常吗?</font><br>FAQ26.08:析构函数应该调用可能抛掷异常的子程序吗?</font><br>FAQ26.09:资源解除分配原语应该通过抛掷一个异常发出错误的信号吗?</font><br>FAQ26.10:terminate()函数应该做些什么?</font><br>FAQ26.11:unexpected()函数应该做些什么?</font><br>FAQ26.12:在什么情况下一个覆盖虚拟成员函数能抛掷不同于列在基类里的成员函数的说明中的异常?</font><br>FAQ26.13:异常处理机制如何可能引起一个程序默默地崩溃?</font><br></font><br>第27章 类型和RTTI</font><br></font><br>FAQ27.01:这一章的目的是什么?</font><br>FAQ27.02:什么是静态类型检查?</font><br>FAQ27.03:什么是动态类型检查?</font><br>FAQ27.04:动态类型检查的基本问题是什么?</font><br>FAQ27.05:如何能避免动态类型检查?</font><br>FAQ27.06:对于动态类型检查有没有更好的方案?</font><br>FAQ27.07:什么是一个能力询问?</font><br>FAQ27.08:带有容器的动态类型检查的可选方案是什么?</font><br>FAQ27.09:有没有动态类型检查是必要的情况?</font><br>FAQ27.10:假定知道一个指向ABC的指针,如何能够发现引用物的类?</font><br>FAQ27.11:什么是一个downcast?</font><br>FAQ27.12:什么是一个使用向下的类型转换的可选方案?</font><br>FAQ27.13:为什么向下的类型转换是危险的?</font><br>FAQ27.14:C++体系的继承图应该是高的还是矮的?</font><br>FAQ27.15:C++体系的继承图应该是单块的还是一个森林?</font><br>FAQ27.16:什么是运行时间类型标识(RTTI)?</font><br>FAQ27.17:什么是dynamic_cast<T>()的目的?</font><br>FAQ27.18:dynamic_cast<T>()是一个治百病的灵药吗?</font><br>FAQ27.19:static_cast<T>()带来什么?</font><br>FAQ27.20:typeid()带来什么?</font><br>FAQ27.21:类型安全的向下类型转换有任何的隐藏的代价吗?</font><br></font><br>第28章 容器</font><br></font><br>FAQ28.01:什么是容器类?和容器类在一块产生的最普通的错误是什么?</font><br>FAQ28.02:数组是福还是祸?</font><br>FAQ28.03:应用程序开发组织应该产生他们自己的容器类吗?</font><br>FAQ28.04:关于指针容器的一些普通错误是什么?</font><br>FAQ28.05:上述的事情意味着应该避免指针的容器吗?</font><br>FAQ28.06:可靠的老式的char*肯定是一个例外,对吗?</font><br>FAQ28.07:auto_ptr<T>能简化关于指针容器的所有权问题吗?</font><br>FAQ28.08:一个象Java的Object类能简化C++的容器吗?</font><br>FAQ28.09:同类的和异类的容器之间有什么不同?</font><br>FAQ28.10:当选择容器类时使用一个"最好种类"的方法是一个好的主意吗?</font><br>FAQ28.11:所有的项目都应使用C++的标准化的容器吗?</font><br>FAQ28.12:什么是C++标准化的容器类?</font><br>FAQ28.13:什么是标准化的C++数列容器类的最好应用?</font><br>FAQ28.14:标准化的C++关联容器类的最好场合是什么?</font><br></font><br>第四部分 论题</font><br></font><br>第29章 把继承和重载混合在一起</font><br></font><br>FAQ29.01:重载函数和覆盖函数之间有什么不同?</font><br>FAQ29.02:什么是隐藏规则?</font><br>FAQ29.03:应该如何处理隐藏规则?</font><br>FAQ29.04:当一个派生类重新定义从基类继承而来的一组重载成员函数的一些而不是全部时它应该做什么?</font><br>FAQ29.05:能重载虚拟函数吗?</font><br></font><br>第30章 重要的三个</font><br></font><br>FAQ30.01:这一章的目的是什么?</font><br>FAQ30.02:什么是重要的三个?</font><br>FAQ30.03:当解除一个没有明确的析构函数的对象时会发生什么?</font><br>FAQ30.04:假如拷贝一个没有一个明确的拷贝构造函数的对象将会发生什么?</font><br>FAQ30.05:当给一个没有一个明确的赋值运算符的对象赋值时会发生什么?</font><br>FAQ30.06:重要的三个的定律是什么?</font><br>FAQ30.07:通常重要的三个中的哪一个首先出现?</font><br>FAQ30.08:什么是远程所有权?</font><br>FAQ30.09:远程所有权如何是特殊的?</font><br>FAQ30.10:假如一个类拥有一个引用物并且没有所有的重要的三个将会怎样?</font><br>FAQ30.11:有没有有助于管理远程所有权的任何C++类?</font><br>FAQ30.12:Auto_ptr能实施重要的三个的定律并解决与远程所有权相关的问题吗?</font><br>FAQ30.13:有没有或许需要重要的三个当中的一个或两个但不是三个的情况?</font><br>FAQ30.14:有没有可能明确地保证重要的三个的其它情况?</font><br>FAQ30.15:为什么使用memcpy()拷贝一个对象会引起一个程序崩溃?</font><br>FAQ30.16:为什么带有可变长度的变元表的程序会崩溃?</font><br>FAQ30.17:为什么使用realloc()重新分配一个对象数组的程序会崩溃?</font><br></font><br>第31章 使用对象阻止内存泄漏</font><br></font><br>FAQ31.01:什么时候内存泄漏是重要的?</font><br>FAQ31.02:避免内存泄漏的最容易的方法是什么?</font><br>FAQ31.03:资源管理最重要的原则是什么?</font><br>FAQ31.04:管理一个资源的对象也应该执行可能抛掷异常的操作吗?</font><br>FAQ31.05:一个对象应该管理两个或更多的资源吗?</font><br>FAQ31.06:如果一个对象有一个指向一个分配的指针而且该对象的某一个成员函数删除了该分配将会怎样?</font><br>FAQ31.07:在被传递给delete之后应该如何处理一个指针变量?</font><br>FAQ31.08:对于一个指向一个在相同的作用域内分配和解除分配的对象的指针应该做些什么?</font><br>FAQ31.09:实现具有指针语义的引用计数是如何地容易?</font><br>FAQ31.10:很难实现具有copy-on-write语义的引用计数吗?</font><br>FAQ31.11:如何对一个类体系实现带有copy-on-write语义的引用计数?</font><br></font><br>第32章 未开化的指针和其它可怕的错误</font><br></font><br>FAQ32.01:什么是一个未开化的指针?</font><br>FAQ32.02:对于一个甚至拥有一个未开化的指针的程序会发生什么?</font><br>FAQ32.03:通过警告"返回对一个局部对象的引用"编译程序意味着什么?</font><br>FAQ32.04:如何控制穿过块的范围的指针?</font><br>FAQ32.05:是否从堆中分配对象能影响引用与指针问题吗?</font><br>FAQ32.06:什么时候应该使用C风格的指针类型转换?</font><br>FAQ32.07:把一个引用变量绑定到一个临时对象是安全的吗?</font><br>FAQ32.08:通过const引用传递的一个参数应该通过const引用被返回吗?</font><br>FAQ32.09:对象min(x,y)或abs(x)的模板函数应该返回一个const引用吗?</font><br>FAQ32.10:什么时候零不一定是零?</font><br></font><br>第33章 高性能软件</font><br></font><br>FAQ33.01:坏的性能是坏的设计或者坏的编码的结果吗?</font><br>FAQ33.02:改善性能的一些技术是什么?</font><br>FAQ33.03:使用指针和引用的优点是什么?</font><br>FAQ33.04:许多引用和指针的缺点是什么?</font><br>FAQ33.05:成员对象如何在改善性能的其它方面超过指针?</font><br>FAQ33.06:哪一个更好,是++i还是i++?</font><br>FAQ33.07:Fred x(5);、Fred y = 5;和Fred z = Fred(5);之间的区别是什么?</font><br>FAQ33.08:使用最终类和最终成员函数时应该考虑什么种类的应用程序?</font><br>FAQ33.09:什么是一个最终类?</font><br>FAQ33.10:什么是一个最终成员函数?</font><br>FAQ33.11:最终类和最终成员函数如何能改善性能?</font><br>FAQ33.12:什么时候应该用一个完全限定名来调用一个非最终的虚拟函数?</font><br>FAQ33.13:当调用相同类的另一个成员函数时应该使用完全限定吗?</font><br>FAQ33.14:最终类和最终成员函数会引起许多代码重复吗?</font><br>FAQ33.15:为什么一些开发人员不喜欢最终成员函数和最终类?</font><br>FAQ33.16:一个编程语言--而不是仅仅编译程序--能影响软件的性能吗?</font><br></font><br>第34章 COM和ActiveX</font><br></font><br>FAQ34.01:谁应该阅读这一章?</font><br>FAQ34.02:什么是部件对象模式?</font><br>FAQ34.03:ActiveX和OLE是什么?</font><br>FAQ34.04:部件对象模式这个名字意味着什么?</font><br>FAQ34.05:什么是一个"二进制对象模式"? </font><br>FAQ34.06:什么是COM的主要的特点?</font><br>FAQ34.07:什么是GUIDs? </font><br>FAQ34.08:为什么COM需要GUIDs(如CLSIDs和IIDs)?</font><br>FAQ34.09:什么是一个界面?</font><br>FAQ34.10:什么是IUnknown界面?</font><br>FAQ34.11:有多少方法能详细说明COM界面?</font><br>FAQ34.12:什么是COM类和COM对象?</font><br>FAQ34.13:调用程序产生并使用一个COM对象是如何困难?</font><br>FAQ34.14:COM如何提供语言透明度?</font><br>FAQ34.15:COM如何提供位置透明度?</font><br>FAQ34.16:因引用计数会出现什么类型的错误?</font><br>FAQ34.17:COM为错误处理定义什么机制?</font><br>FAQ34.18:如何改变界面?</font><br>FAQ34.19:COM是面向对象的吗?</font><br>FAQ34.20:关于COM最大的问题是什么?</font><br>FAQ34.21:COM和C++之间的主要区别是什么?</font><br>FAQ34.22:什么时候应该把一个类定义为一个COM类?</font><br>FAQ34.23:自动化是什么?</font><br>FAQ34.24:什么是调度界面?</font><br>FAQ34.25:什么时候一个类应该暴露一个调度界面?</font><br>FAQ34.26:自动化如何工作?</font><br>FAQ34.27:Invoke如何实现所有上述的事情?</font><br>FAQ34.28:什么是一个类型库?</font><br>FAQ34.29:使用类型库的益处是什么?</font><br>FAQ34.30:类型库如何改善性能?</font><br>FAQ34.31:什么是双重界面?</font><br>FAQ34.32:在双重界面上都有什么限制?</font><br>FAQ34.33:什么是OLE常规控件和ActiveX控件?</font><br>FAQ34.34:为什么ActiveX控件不同于OLE常规控件?</font><br>FAQ34.35:什么是一个控件容器?</font><br>FAQ34.36:什么是部件种类?</font><br>FAQ34.37:事件是什么?</font><br>FAQ34.38:什么是DCOM?</font><br>FAQ34.39:DCOM的基础结构是如何稳定的?</font><br>FAQ34.40:什么是COM+?</font><br></font><br>第35章 过渡到CORBA</font><br></font><br>FAQ35.01:什么是CORBA?</font><br>FAQ35.02:什么是ORB?</font><br>FAQ35.03:什么是IDL?</font><br>FAQ35.04:什么是COS?</font><br>FAQ35.05:什么是OMA?</font><br>FAQ35.06:什么是OMG?</font><br>FAQ35.07:这一章的目的是什么?</font><br>FAQ35.08:这一章最重要的信息是什么?</font><br>FAQ35.09:在CORBA背后的主要概念是什么?</font><br>FAQ35.10:OMG IDL不是非常和C++相同吗?</font><br>FAQ35.11:一个CORBA对象的寿命和一个C++对象的寿命相同吗?</font><br>FAQ35.12:与CORBA实现相互作用的C++代码可移植到不同的CORBA供应商吗?</font><br>FAQ35.13:CORBA异常如何与C++异常相比?</font><br>FAQ35.14:哪一个CORBA实现是最好的?CORBA好于COM吗?</font><br></font><br>第36章 C语言思考</font><br></font><br>FAQ36.01:当在相同的应用程序里混合C和C++代码时主要的问题是什么?</font><br>FAQ36.02:C++代码如何调用C代码?</font><br>FAQ36.03:C代码如何调用C++代码?</font><br>FAQ36.04:对于从C++函数里调用的C函数为什么连接程序会发生错误和反之亦然?</font><br>FAQ36.05:如何把一个C++类的对象传递给一个C函数或者从一个C函数传出?</font><br>FAQ36.06:一个C函数能直接地访问在一个C++类的对象中的数据吗?</font><br>FAQ36.07:能把C++ I/O(<iostream>)和C I/O(<stdio.h>)混合在一起吗?</font><br>FAQ36.08:哪一个是更安全的:<iostream>还是<stdio.h>?</font><br>FAQ36.09:哪一个是更可扩充的:<iostream>还是<stdio.h>?</font><br>FAQ36.10:哪一个是更有弹性的:<iostream> 还是<stdio.h>?</font><br>FAQ36.11:为什么好象C++编程比C感觉更远离机器?</font><br>FAQ36.12:为什么C++比C在你的背后做更多的事情?</font><br></font><br>第37章 私有和保护继承</font><br></font><br>FAQ37.01:什么是私有继承和保护继承?</font><br>FAQ37.02:私有继承和保护继承之间的区别是什么?</font><br>FAQ37.03:私有和保护继承的语法和语义是什么?</font><br>FAQ37.04:什么时候应该使用正常的has-a而不是私有或保护继承?</font><br>FAQ37.05:对于公共、保护和私有继承的访问规则是什么?</font><br>FAQ37.06:在一个私有的或者保护的派生类内,在基类是公共的一个成员函数如何能在派生类内依然是公共的?</font><br>FAQ37.07:一个指针应该从一个私有的或者保护的派生类转换到它的基类吗?</font><br></font><br>第38章 成员函数的指针</font><br></font><br>FAQ38.01:指向一个非静态成员函数的一个指针的类型是什么?</font><br>FAQ38.02:指向非静态成员函数的指针能够被传递给期望象C的函数指针的信号和X事件回调等处理程序吗?</font><br>FAQ38.03:当使用指向成员函数的指针时某一最普通的错误是什么?</font><br>FAQ38.04:如何声明一个非静态成员函数指针数组?</font><br></font><br>第39章 过渡到OO和C++</font><br></font><br>FAQ39.01:谁应该阅读这一章?</font><br>FAQ39.02:这一章的主要的启示是什么?</font><br>FAQ39.03:在过渡方面有多少技术专长阶段?</font><br>FAQ39.04:为什么要麻烦定义专长水平?</font><br>FAQ39.05:能从一本书中学会OO/C++吗?</font><br>FAQ39.06:能从一个课程中学会OO/C++吗?</font><br>FAQ39.07:学会OO/C++的关键是什么?</font><br>FAQ39.08:小项目是开始做的一个好的方式吗?</font><br>FAQ39.09:作为一个好的C程序员当学习OO/C++时有帮助吗?</font><br>FAQ39.10:当学习OO/C++时什么技术有帮助?
猜您喜欢