读书笔记《C++ PROGRAM DESIGN》
C++ PROGRAM DESIGN An Introduction to Programming and Object-Oriented Design
书名:C++程序设计----程序设计和面向对象设计入门(第3版)
作者:James P.Cohoon Jack W.Davidson
出版者:清华大学出版社
2002年1月第1版
定价:76元 (好贵啊~ 我这本是借的:)
这本书是影印版,意思是这本书是英文版,一共是953页,前前后后我看了4个月左右
看到第十三章,最后的Chapter 14 Templates and polymorphism 和 Chapter 15
Software project-Bug Hunt! 没有看。美中不足的是,我没有动手操作上面的代码。
这本书非常适合初学者,内容上都是深入浅出,看起来也很有趣。前提是:你只是想学
C++而不是为了考试。相比之下,国内的很多教材,可以称得上是“考试的教材”,因为
更专注于细节的讲述,比如计算一个 a=1; ++a++; 等等,常常学完了之后,考试能够
得很高的分数,而面对实际问题,甚至不知道如何开始。
记下一点东西,算是“不动笔墨不读书”吧。
第一章 Computing and the object-oriented design methodology
介绍什么是程序,什么是面向对象。关于程序举了一个自动售货机机器语言的例子
很有意思。
第二章 The fundamentals
介绍C++的基本类型,特别讲述了cin cout 。学过这章,完全可以写一写计算的
简单程序。
第三章 Modifying objects
介绍string object,引入EzWindow object,最后讲述了机器计算的历史。
第四章 Control construts
介绍if while 这样的控制语句,然后讨论了一下关于语言风格的问题。比如:使用
if 时“{”和“}”的放置等等。我认为这对于保证程序的可读性很重要。
第五章 Function basics
介绍如何使用函数,预定义,条件编译,这些在编写大型或者说“复杂一点”的程序
时候是非常有用的。还有关于iostream, stream的观念是抽象出来的,与具体设备无关的;
fstream 也就是文件的读写。
第六章 Programmer-defined functions
介绍变量的作用域和形参实参。常量参数存在的必要:能够高效的传递an object
属于programming tip 。function overload 递归。
第七章 The class construct and object-oriented design
以Ez-Window为例子讲述面向对象的思想。从class开始讲起。如何申明一个class
如何访问这个class中的objects,如何与这个object的成员交互。附录继续介绍history of computing.这次
讲述的是ENIAC和EDVAC。其中插入了关于ENIAC专利的事情。如何“After more than 25 years,Atanasoff's
contributions to the development of the electronic digital computer were finnally made public” 第八章 Implementing abstract data types
引入ADT(abstract data type)的概念。以实现实数这个类,及其运算为例子
展示如何使用OOP(国内教材好像更喜欢使用复数为例子?)
ADT Library设计上的minimality(最小化原则)
第九章 List 列表结构
列表结构的实现主要有array的和class方式。后者是面向对象的方法,也是本章
介绍的重点。还介绍了重要的算法:sort(排序) insertionSort
Container Class,Standard Template Library (STL)
Binary searching
Maze Runner
第十章 The EzWindows API 一个详细的例子
第十一章 Pointer and dynamic memory
指针是C语言灵活性的体现,也是诸多bug的根源。
pointer to functions
(题外话:我很少使用指针处理算法,因为现在PC内存足够大,
使用指针通常需要额外的debug得不偿失)
第十二章 Testing and debugging
很有趣的一章,介绍测试方法:
black-box testing
white-box testing
12.2.2 debugging tips and techniques
Simplify the problem Stabilize the error
Locate the error
Explain the bug to someone else
Recognize common bugs
Recompile everything
Gather more information
Pay attention to the compiler
Fix bugs as you find them
第十三章 Inheritance
每一个程序员都梦想着有一天:他维护的程序只需要添加代码而不必去debug它们。
至少每天我在浏览他人的代码时,始终充满这样的想法。