【自序】
虑而後能得(自序)
故事
接触 C++ 大约是 1989 年的事。那时候的 PC 以现在的眼光看,除了「蛮荒」之外没有更合适的形容词了。横扫千军的 Windows 3.0 还没有诞生,如今以 C++ 编译器技术闻名於世的 Borland 公司那个时候也还没有踏进 C++ 领域,遑论动作更慢的 Microsoft。当时我用的编译器是 Zortech C++。
将近 10 年的历史,并不表示我在 C++ 技术上就怎麽地超凡入圣了。事实上初期我很排斥这个语言。我没有用心去体会,也就看不到其中的美好。我用数年的时间把心力全花在 Windows 技术的钻研。那时候 C++ 风潮未开,我也不以为意。
决定好好研究 C++,不是为了要开发自己的 class library,而是为了要使用别人的 class library。92 年软体界开始出现一些所谓的 application framework,是一种用来帮助程式员发展 Windows 应用软体的大型 C++ class library(如今也有非 C++ 语言的类似产品)。为了运用这些有着巨大架构以及巨大能量的 C++ class library,我必须重拾 C++。然後,为了更能操控掌握那些复杂的架构,同时也因为对技术原理有一股强烈的好奇心,我开始看 Microsoft Foundation Class(MFC) 的原始码。
这使我有了一种异於常人的学习经验。我看的是行销全世界、无数程式员使用、市场占有率最高的一套 C++ class library 的原始码。从其中,我得到许多宝贵的知识与经验。然後我慢慢体会了物件导向(Object Oriented)之美、多型(Polymorphism)之美、虚拟(Virtual)之美。
学习的路线,不一定每个人都相同。但是黑暗中摸索的日子,实在不必人人走一遭。对於位居物件导向精髓地位的「多型与虚拟」观念有了深刻体会之後,我有一股强烈的欲望,要把心得写下来。
於是我写了这本书。
层次
一般而言,C++ 是一个难学易用的语言。
C++ 的难学,初始在於其重重的布幕,布幕之中编译器对我们的程式码做了太多的手脚,使我们惯於循序思考的工程脑袋一无所措。及长又面临新的思维模式,使我们必须扭转惯常的思考习惯。
C++ 的易用则在於其巨大的弹性,能够以多型(polymorphism)、虚拟(virtual)、模板(template)等种种方式,让现有的码去处理未知的、未来的资料型态。
当然,易用必须先能用。用不好或不能用的话,「写 C++ 程式」最後就成了只是「使用 C++ 编译器」,这是大家常拿来彼此调侃的笑话。
在「难学」的背景下,「易用」是使我们依然前仆後继的动力。愈来愈多的大学资讯科系把 C++ 开在大一课程,这虽然说明 C++ 是多麽地重要,可也苦了资讯新兵们。
其实「难学」的最大症结,在於很难得有一本书,能够一针见血地指出多型与虚拟的重要性;在我们粗具语法基础之後,直接把我们导引到最核心最重要的思想,并且在建立这个思想体系的过程中,提供足够的必要基础。
我希望这本书能够做到这一点。
同样是使用 C++ 语言,有人进入了物件导向的殿堂,有人只学到 C++ 的语法;
有人练书法;
有人写毛笔字;
有人拿有毛的笔写字。
我们要向书法的境界挑战,不要只是拿有毛的笔写字。
定位
讲述 C++ 语法(syntax)的书籍很多,
讲述 C++ 语意(semantics)的书籍很少,
讲述 C++ 物件导向(object oriented)精神的书籍更少,
深入 C++ 物件模型(object model)的书籍则几乎没有。
这本书第一章对 C++ classes 的语法和语意做了一个梗概整理。第二章谈 C++ 的物件模型,第三章谈型别转型(RTTI 的重要服务),第四章谈多型与虚拟的精神,第五章实作一个大型例子,示范如何在一个 class library 中完成 RTTI、Dynamic Creation、Persistence 等基础建设。第六章为 Component Object Model(COM)奠基。
很容易看得出来,你不能够完全依赖这本书学习 C++ 语法(因为第一章不过才 96 页)。但是在学习了 C++ 语法之後,你可以依赖这本书学习物件导向的精髓。
我自己一直存在一个疑惑。别人常认为我写的是高阶技术书籍,我却认为我写的是高阶技术的入门书籍。也许我挖掘得很深很广,但,不就是要彻底了解重要的基础知识,才得登堂入室吗?
这本书,我仍旧挖得很深,尤其是第二章和第五章。但是我想粗具 C++ 语言基础的人应该都能循序接受。我渴望证明,C++ 的难学,问题不在学生,而在老师。
当然,本书的读者,你,不能够只是一位程式设计领域的全然新手。
厚薄
每次完成一本书,抱着厚厚的一叠完稿北上,父亲看到堆起来有 10 公分高的雪铜纸,总是对我说:『这麽厚的书,怎麽看』?而我总要解释『这是雪铜纸,比较厚。而且单面印刷,厚度加倍。经过雷射印表机的高温,它又有点卷...』。
但是想想,1000 页左右的书籍,再怎麽东折西扣也是厚得吓人。
渐渐地父亲不再问那个问题了,大概已经妥协於「电脑书都那麽厚」的印象之中。而我更是早就习惯看大部头的书,写大部头的书。
大家都习惯了吧!这两年 K 。
书籍的厚薄,是因於内容的选择,与读者群的界定。很难得有这麽一个题材,我以 340 页的篇幅完成了它。
书籍很薄,又经过我精心的章节次序安排与起承转合,您就不要跳着看了吧。耐着性子,一页一页,从头到尾把它好好咀嚼消化一遍。然後,如果你愿意,写信给我,我希望听到你的喜悦。
批评也是我所欢迎的。
侯俊杰 1998.07.02 于新竹
评分
评分
评分
评分
我一直认为,一本优秀的编程书籍,不仅仅在于它能教会你“做什么”,更在于它能让你理解“为什么这么做”。《多态与虚拟》在这方面做得非常出色。在书中关于“虚拟函数”的章节,作者并没有立刻陷入复杂的语法细节,而是先详细阐述了“对象模型”的概念,以及在继承体系中,子类如何重写父类方法,以及在实际调用时,系统如何根据对象的实际类型来选择正确的函数。这个过程的讲解,就像是在拆解一个精密的机械装置,每一个齿轮、每一个传动轴的作用都讲解得一清二楚。我印象特别深刻的是,书中用了一个非常贴切的比喻来解释虚函数表(vtable),它将原本抽象的概念具象化,让我能够直观地理解编译器是如何在运行时找到正确的函数地址的。这种由宏观到微观,再由微观回到宏观的讲解方式,极大地提升了我学习的效率和深度。我不仅学会了如何声明和使用虚拟函数,更重要的是,我开始真正理解了C++多态的核心机制。
评分这本《多态与虚拟》的封面设计着实令人眼前一亮,深邃的蓝色调搭配简洁而富有力量感的字体,瞬间就勾勒出一种神秘而又严谨的学术氛围。我是一名初入编程领域的学生,对许多概念都感到模糊不清,尤其是“多态”和“虚拟”这两个词,总是在各种技术文档和教程中反复出现,却又难以形成一个清晰的整体认知。我曾经尝试阅读过一些零散的文章,但往往是看了这篇忘了那篇,缺乏系统的梳理。当我翻开这本书的第一页,那种扑面而来的专业感,让我既有些许敬畏,又充满了期待。序言部分作者的恳切邀请,以及他对本书内容定位的清晰阐述,让我感觉这本书并非一本泛泛而谈的“速成手册”,而是一次深入的、有条理的探究之旅。我尤其喜欢它在开篇对“为什么需要多态”这样一个基础性问题的探讨,它没有直接抛出代码示例,而是从实际编程的痛点出发,循序渐进地引导读者去理解多态的必要性。这让我觉得作者非常理解初学者的困境,也为我后续的学习打下了坚实的基础,感觉这本书将会是我理解这些核心概念的“敲门砖”。
评分我是一名对C++标准和内部机制非常感兴趣的研究者,尤其关注C++在支持面向对象特性方面的演进。《多态与虚拟》这本书,提供了一个非常系统和深入的视角。作者在书中,不仅讲解了C++98标准下的多态实现,还对后续标准中可能出现的优化和改进进行了探讨。我特别欣赏书中关于“多重继承”和“虚继承”的演进历史的介绍,它让我了解了C++在设计这些特性时所面临的挑战和权衡。书中对“运行时类型信息(RTTI)”的详细解释,也让我对C++的动态特性有了更全面的认识。这本书为我提供了宝贵的参考资料,也进一步激发了我对C++底层机制研究的兴趣。
评分我一直认为,学习一门编程语言,不仅仅是学习它的语法,更重要的是理解它的设计理念。《多态与虚拟》这本书,让我对C++的设计理念有了更深刻的认识。作者通过对多态和虚拟继承的深入探讨,展现了C++在提供强大功能的同时,如何兼顾效率和灵活性。书中对于“虚函数”和“纯虚函数”的区分,以及它们在抽象基类设计中的作用,都体现了C++在构建复杂系统时的严谨和周到。我尤其欣赏作者在讲解过程中,始终坚持以解决实际问题为导向,将晦涩的概念与具体的编程场景相结合。这让我感觉,这本书不仅仅是一本技术手册,更是一本关于如何用C++优雅地解决问题的“思想指南”。
评分阅读《多态与虚拟》的过程,与其说是在学习,不如说是在进行一场思维的“重塑”。我原先对C++中的继承机制,特别是多重继承,存在着一些模糊的认知,尤其是在处理“钻石问题”时,总是感到力不从心。这本书对“虚继承”的讲解,简直是为我量身定做的。作者非常细致地剖析了虚继承是如何解决多重继承中的重复基类问题的,以及它在内存布局上的影响。我特别喜欢书中对“基类初始化”的深入讨论,它澄清了我之前对虚基类构造函数调用顺序的一些误解。通过书中的图示和代码示例,我能够清晰地看到,虚继承是如何通过引入额外的指针来确保共享基类的唯一性。这不仅仅是技术上的突破,更是对理解C++内存管理和对象构造过程的一次重要升华。
评分我是一个对底层原理充满好奇的程序员,总是想知道代码在运行时到底发生了什么。《多态与虚拟》这本书,满足了我对“幕后故事”的探求欲。作者在书中,深入剖析了C++编译器是如何处理虚拟函数表的,包括vtable的生成、对象的内存布局以及方法调用的具体过程。我特别喜欢书中关于“虚函数指针”的讲解,它让我明白,每一个带有虚拟函数的对象,实际上都含有一个指向其vtable的指针,这个指针是实现多态的关键。通过对这些底层细节的了解,我不仅能够更准确地编写多态代码,还能更好地进行性能调优和调试。这本书让我从一个“使用者”变成了一个“理解者”,甚至是一个“掌控者”。
评分作为一名有几年经验的Java开发者,我一直以来都是通过Java的虚方法调用机制来理解多态。当我在研究C++中的“多态与虚拟”时,我抱着一种“对比学习”的心态开始了这本书的阅读。然而,这本书立刻就展现出了它独特的价值。它不仅仅是简单地对比Java和C++的异同,而是更深入地揭示了C++实现多态的底层机制,比如vtable的构建和查找过程。作者对于“运行时类型信息(RTTI)”的讲解,也让我对C++的动态特性有了更深刻的理解。在书中关于“动态绑定”的章节,我被作者对效率和灵活性的权衡分析所吸引,它让我明白,虽然虚拟函数有一定的运行时开销,但它所带来的灵活性是值得的。这本书让我对“多态”这个概念,有了更深层次的、跨语言的理解,也让我开始重新审视我对C++的认识。
评分我是一名在嵌入式系统领域工作的工程师,代码的效率和健壮性是我们最关注的。起初,我对于在资源受限的嵌入式环境中过多地使用多态和虚拟函数有所疑虑,担心它们会带来不可接受的性能开销。《多态与虚拟》这本书,恰恰解决了我这些顾虑。作者在讲解过程中,非常注重对性能的分析,它详细阐述了虚拟函数调用在不同编译器和处理器上的实际开销,以及如何通过一些优化手段来减小这些开销。书中还专门辟章节讨论了“无缝多态”和“静态多态”的概念,比如通过模板来实现的“编译期多态”。这让我意识到,多态并非只有“运行时多态”这一种形式,而是在不同的场景下有着不同的实现方式和侧重点。这本书让我对如何恰当地在嵌入式环境中应用多态有了更清晰的指导,也让我对C++的强大和灵活性有了更深的敬畏。
评分我一直对“设计模式”有着浓厚的兴趣,而多态无疑是支撑许多经典设计模式(如策略模式、工厂模式)的核心基石。《多态与虚拟》这本书,为我理解这些设计模式提供了坚实的理论基础。作者在书中,通过一个又一个精心设计的例子,展示了多态如何在实际的软件设计中发挥作用。例如,在讲解“开闭原则”时,作者非常清晰地说明了多态如何使得系统在增加新功能时无需修改现有代码,只需扩展新的派生类即可。这让我对“面向接口编程”有了更深的体悟,也让我开始思考如何在我的日常开发中,更主动地运用多态来提升代码的可维护性和可扩展性。这本书的价值,不仅仅在于对C++语法细节的讲解,更在于它对软件工程思想的深刻阐释。
评分我是一个对面向对象编程(OOP)深感兴趣的开发者,长期以来,多态和虚拟继承一直是困扰我的难点。许多资料对这些概念的解释,要么过于晦涩难懂,要么过于浅尝辄止,无法满足我对细节的探求。《多态与虚拟》这本书,可以说是我近年来读到的关于这一主题最深刻、最全面的作品。它不仅仅是罗列语法规则,而是深入探讨了多态的哲学意义,以及它在构建大型、可维护的软件系统中的关键作用。作者在讲解“纯虚函数”和“抽象类”时,非常强调它们在强制接口实现和定义规范方面的价值,这让我对如何设计更加健壮的类结构有了全新的认识。书中还穿插了一些实际案例的分析,比如在图形库中如何使用多态来实现不同形状的绘制,以及在事件处理系统中如何通过多态来分发不同的消息。这些生动的例子,让抽象的理论变得触手可及,也让我更加坚信多态是编写灵活、可扩展代码的关键。
评分希望有全本电子版。。。
评分希望有全本电子版。。。
评分希望有全本电子版。。。
评分希望有全本电子版。。。
评分希望有全本电子版。。。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2026 book.wenda123.org All Rights Reserved. 图书目录大全 版权所有