More Exceptional C++中文版试读(泛型程序设计与C++标准库) [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。] 泛型程序设计与C++标准库 C++威力强大的特性之一是对泛型程序设计(generic programming)的支持。这种威力直接反映在C++标准库的灵活性上,特
More Exceptional C++中文版试读(继承与多态) [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。] 继承与多态 不来点继承和多态,面向对象将会怎样? 尽管继承常被滥用,但它还是一种很重要的工具——这包括多继承。特别是,当你生活在现实世界中时,你会发现,
More Exceptional C++中文版试读(优化与性能) [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。] 优化与性能 对程序员来说,效率总是很重要。在C和C++的传统中,效率是重要支柱之一,“不要为没有使用的东西支付任何成本”这一指导原则——也称为零成本原则——总是语言设计和程序库
More Exceptional C++中文版试读(异常安全议题及技术) [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。] 异常安全议题及技术 在现代C++程序设计中,对异常安全(exception safety)议题一无所知却想写出健壮的代码,这无异于痴人说梦。的确如此。
More Exceptional C++ 中文版试读(译序及目录) [Herb Sutter 的名作More Exceptional C++中文版即将出版。作为本书译者,我很高兴将本书推荐给大家。征得华中科技大学出版社同意,我将公开部分译稿,敬请大家批评指正。] 与大师面对面(译序) 小提琴家穆特录制过一张唱片,收录的是贝多芬最伟大的两部小提琴作品1。聆听那张唱片,你仿佛听见贝多芬在向你倾诉他对音乐艺术的理解和感悟、为你解答小提琴音乐创作
基于DirectDraw的Gamma calibrator机制之探讨 基于DirectDraw的Gamma calibrator机制之探讨一.问题的提出Gamma calibrator基于动态gamma ramp技术。为系统提供动态gamma ramp支持,基于以下应用的需要:1. 游戏程序的设计者可以为用户提供一致的视觉效果,而不论用户使用什么系统。2. 随着电子商务的迅猛发展,商家和用户都迫切需要在Internet上看到货物样品的真实色彩。3. 谁都希望
Java Tip: 实现Command模式 Java Tip: 实现Command模式概述有时需要向对象发送请求,但是不知道 "被请求的操作" 或 "请求的接受者" 的任何信息。在面向过程的程序设计语言中,这类通信是通过回调函数来完成的:在某个地方登记这个函数,然后在后面调用它。在面向对象程序中,command(命令)与回调函数等价,它封装了回调函数。本文演示如何在Java中实现Command模式。--------------
Java Q&A: 使用Singleton模式?给我一个理由先! Java Q&A: 使用Singleton模式?给我一个理由先!Q: 在很多地方我都看到使用了Singleton类。我的问题是:较之一个包含static方法(methds)的类,使用Singleton具有什么优点呢?A: 不使用包含static方法的类而使用Singleton,其区别在于,后者可以带来有效的面向对象设计。Singleton通常展示的是一种更清晰的方法。而一个包含static
Java Q&A: 使用Factory Method模式 Java Q&A: 使用Factory Method模式Q: 阅读 "Polymorphism in its purest form" 一文时,我看到了一个不熟悉的术语 "Factory method"。你能解释一下什么是Factory method并说明如何使用它吗?A: Factory method(工厂方法)只不过是实例化对象的一种方法的名称。就象工厂一样,Factory metho
Java Tip: 用Reflection实现Visitor模式 Java Tip: 用Reflection实现Visitor模式概述Visitor模式的常用之处在于,它将对象集合的结构和对集合所执行的操作分离开来。例如,它可以将一个编译器中的分析逻辑和代码生成逻辑分离开来。有了这样的分离,想使用不同的代码生成器就会很容易。更大的好处还有,其它一些公用程序,如lint,可以在使用分析逻辑的同时免受代码生成逻辑之累。不幸的是,向集合中增加新的对象往往需要修
Java Q&A: 使用Observer模式 Java Q&A: 使用Observer模式A:我想在自己的Java程序中使用Observer模式。基于此,能否提供某些示例代码来演示如何去做?Q:正如面向对象编程有助于代码复用一样,设计模式可以促进设计复用。确实,设计模式可以让你复用那些正确的、成熟的设计。但近来,批评设计模式的声音越来越多。批评者指出,缺乏经验的开发者会很容易地掉进 "模式陷阱" 之中。模式陷阱让缺乏经验的开发者迷
Java Q&A: 抽象类和接口 - 实战练习 Java Q&A: 抽象类和接口- 实战练习在Java中,什么时候该用抽象类,什么时候该用接口?下面的文章将通过实例,而不是从理论的角度给你一个清晰的回答,让你有可能获得醍醐灌顶般的彻悟。以下是原文翻译。----------------------------------------------------针对2001年4月的 "抽象类和接口" 一文,读者给予了积极的反馈。其
CUJ C++ Experts Forum: conversation (September 2001) Conversations: Back to Base-icsCUJ C++ Experts Forum: conversation (September 2001)和往常一样,我又在为一个按说应该很简单的设计问题大伤脑筋。可能是劳工节假期刚过还没来得及收心吧,我感觉自己有点迷迷糊糊的。Wendy刚开始休产假,我的靠山也没了。其实任务只不过是要在一个工程中引入一个新类而已。我已经有一
Effective C++ 2e Item50 条款50: 提高对C++的认识C++中有很多 "东西":C,重载,面向对象,模板,例外,名字空间。这么多东西,有时让人感到不知所措。怎么弄懂所有这些东西呢?C++之所以发展到现在这个样子,在于它有自己的设计目标。理解了这些设计目标,就不难弄懂所有这些东西了。C++最首要的目标在于:· 和C的兼容性。很多很多C还存在,很多很多C程序员还存在。C++利用了这一基础,并建立在 ---- 我是
Effective C++ 2e Item49 条款49: 熟悉标准库C++标准库很大。非常大。难以置信的大。怎么个大法?这么说吧:在C++标准中,关于标准库的规格说明占了密密麻麻300多页,这还不包括标准C库,后者只是 "作为参考"(老实说,原文就是用的这个词)包含在C++库中。当然,并非总是越大越好,但在现在的情况下,确实越大越好,因为大的库会包含大量的功能。标准库中的功能越多,开发自己的应用程序时能借助的功能就越多。C++库并非提
Effective C++ 2e Item48 条款48: 重视编译器警告很多程序员日常总是不理睬编译器警告。毕竟,如果问题很严重,就会是个错误,不是吗?这种想法在其它语言中相对来说没什么害处,但在C++中,可以肯定的一点是,编译器的设计者肯定比你更清楚到底发生了什么。例如,大家可能都犯过这个错误:class B {public: virtual void f() const;};class D: public B {public
Effective C++ 2e Item47 条款47: 确保非局部静态对象在使用前被初始化大家都是成年人了,所以用不着我来告诉你们:使用未被初始化的对象无异于蛮干。事实上,关于这个问题的整个想法会让你觉得可笑;构造函数可以确保对象在创建时被初始化,难道不是这样吗?唔,是,也不是。在某个特定的被编译单元(即,源文件)中,可能一切都不成问题;但如果在某个被编译单元中,一个对象的初始化要依赖于另一个被编译单元中的另一个对象的值,并且这第二
Effective C++ 2e Item46 条款46: 宁可编译和链接时出错,也不要运行时出错除了极少数情况下会使C++抛出异常(例如,内存耗尽 ---- 见条款7)外,运行时错误的概念和C++没什么关系,就象在C中一样。没有下溢,上溢,除零检查;没有数组越界检查,等等。一旦程序通过了编译和链接,你就得靠自己了 ---- 一切后果自负。这很象跳伞运动,一些人从中找到了刺激,另一些人则吓得摔成了残废。这一思想背后的动机当然在于效率:没有运
Effective C++ 2e Item45 杂项进行高效的C++程序设计有很多准则,其中有一些很难归类。本章就是专门为这些准则而安排的。不要因此而小看了它们的重要性。要想写出高效的软件,就必须知道:编译器在背后为你(给你?)做了些什么,怎样保证非局部的静态对象在被使用前已经被初始化,能从标准库得到些什么,从何处着手深入理解语言底层的设计思想。本书最后的这个章节,我将详细说明这些问题,甚至更多其它问题。条款45: 弄清C++在幕后为你
Effective C++ 2e Item44 条款44: 说你想说的;理解你所说的在本章关于 "继承和面向对象设计" 的简介中,我曾强调,理解不同的面向对象构件在C++中的含义十分重要。这和仅仅知道C++语言的规则有很大的不同。例如,C++规则说,如果类D从类B公有继承,从D的指针到B的指针就有一个标准转换;B的公有成员函数将被继承为D的公有成员函数,等等。这些规则都是正确的,但在将设计思想转化为C++的过程中,它们起不到任何作用。相反,