书评:《C++沉思录》
图书馆中偶尔见到这本书,就拿来翻了一下,发现内容相当吸引人,也比较适合我,就毫不犹豫地借来看了。
C++的主要内容有什么?
重载,面向对象,模板。
这就是我看完书后的感受。本书由编写一个类似智能指针的Handle类开始,主要介绍以面向对象解决编程中的问题。给我影响深刻的就是书中几乎每一章都使用的引用计数,将C++中的内存管理交给包含数据的底层对象,从而对用户隐藏了内存分配的细节。这样的好处很明显,对用户友好,而且如果底层没有问题也不会出现内存泄漏了。
重载在书中出现的频率更多,几乎每一页都有。重载运算符,重载构造函数。作为C++重要特性之一,重载涉及到虚函数等多个方面。std::string就有8+个重载的构造函数,无疑重载在使用上类上更加方便,但是我觉得要记住所有的重载也比较难啊…
面向对象三个特点:封装,继承和多态。这三个特点在书中都有体现。书中的好几个例子都让你感受这三个特点的优点,具体只能看书慢慢体会了。继承和多态在C++中也是十分复杂,光是继承父类就分为public, protect, private三种,多态使用虚函数实现,虚函数又是复杂无比。
使用模板可以实现泛型编程。最大的好处就是设计容器,实现数据结构上了。至少可以摆脱丑陋的typedef int ElementType了,不过我对泛型写法<T>不太喜欢,一旦编译出错想定位也比较难…书中也只介绍了在设计容器类和编写通用函数上的用法。
书中最喜欢的就是对库接口的设计,常常听人说:「要面向接口编程而不是面向实现编程」,一直无法理解,现在总算有些理解了。
这书是很多年前写的了,所以也缺少对新特性的介绍,不过对我这种仅仅了解了C++语法,却不知道如何编写C++程序的人来说还是获益良多。
书中还有一句名言:
「库设计就是语言设计,语言设计就是库设计。」
准确不准确就见仁见智了,不过看完这书我也能大概分辨出标准库某个功能是怎么粗略实现的,为什么要这样实现。
作者在书的最后给了几点建议:
- 避免使用指针;
- 提倡使用程序库;
- 使用类来表示概念。
这些都是从C->C++过程中体会到的,尤其是第二点,由于C的标准库功能较少,很多功能需要自己实现,转到C++后,已经有足够多的库来满足我们的需要,提倡使用程序库,能使代码更加清晰易懂,避免重复造轮子。
最后还是抱怨一句,看的是中文版,书中不少大小写,花括号的错误,翻译也不算太好。