现在的位置: 首页 > 综合 > 正文

第一章 致读者部分(学习笔记)

2012年07月07日 ⁄ 综合 ⁄ 共 2523字 ⁄ 字号 评论关闭

1.2、如何 学习C++

   在学习C++时要集中关注概念,而不要迷失在语言的技术细节之中。学习语言的目的是成为一个更好的程序员,也就是使自己在设计和实现新系统时工作更有成效。

   C++支持多种程序设计风格,这些实现依赖于C++的强类型的检查,目的是获得一种高层次的抽象。

 每种语言都可以成为如何写C++程序的一个丰富的思想泉源,但这些思想必须转化为某种能够适应C++的一般结构和类型系统的东西,以便能够出现在不同的环境中。如果去颠覆一个语言的基本类型系统,可能得到的至多是伊鲁斯式的胜利。

 C++支持一种逐步推进的学习方式,你学习一个新语言的方式依赖于你已经知道些什么还依赖于你的学习目的。假定你学习C++的意图并不简单学习一种新的语法形式,要去做某些已经习惯做的事情,而是想学习一种构造系统的新的更好的方式。这件事只能逐渐完成,需要经过实践。

 你将要在还没有完全理解所有的语言特征和和技术之前就去使用C++,常常去构造的实际的系统。通过支持多种程序设计范型,C++支持在不同掌握程序上进行生产性的程序设计。 

 存在着一些独立开发和发行的C++实现,有许多的工具、库和软件开发环境可以使用。推荐参考来源:[Barton,1994]、[Booch,1994]、[Henricson,1997]、[Koeing,1997]、[Martin,1995]。

1.3、C++的设计

 简单性是一个重要的设计准则:如果在一个地方有一个选择,简化语言定义或者简化编译器,那么我们一定先前者。

 C++没有高级的数据类型,也没有高级的基本操作。举例来说C++没有提供带有求逆运算的矩阵类型,也没有带拼接运算的字符串类型。用户如果需要一个类型,那么可以在语言本身之中定义它。事实上,定义新的通用或者专用的类型就是在C++里最基本的程序设计活动。一个设计良好的用户类型与内部类型之间的差异仅仅在于定义的方式,而不在其使用的方式。

 在C++的设计中,极力避免了那些即使不用也会带来运行时间或者空间额外开销的特征。

    C++ 的类型检查和数据隐藏特征依赖于编译时对程序的分析,以防止因为意外而破坏数据的情况。它们并不提供系统安全性或者防止某些人有意地打破这种规则。它们当然可以随意使用而不会带来额外的时间和空间开销。

1.3.1、效率和结构

C++是以C程序设计语言为基础开发出来的,除少量例外,它继续维持了以C作为一个子集。除了new、delete、dynamic_cast,以及throw运算符和try-块(try-block)之外,C++的各种表达式和语句都不需要在特殊的运行时支持。

1.5 C++的使用

   C++能够有效的用到那些需要在各种各样的不同应用领域中工作的应用系统上.很容易找到一个应用系统,其中涉及到局域网或者广域网、数值处理、图形与用户的交互以及数据的访问。C++并不是已经设计出的各种语言中最小和最清晰的。但不管怎样,它是:

   1.对于教授基本概念而言清晰。

 2.对于深刻的项目而言足够现实、高效和灵活。

 3.对于依赖各种不同开发和执行环境的组织或研究机构而言,使用起来足够方便。

 4.对于教高级概念和技术的媒介而言,足够的容易理解。

 5.对于作为从学习到非学术使用的工具而言,也足够的商业化。

1.6.1 给C程序员的建议

 一个人对C越了解,在写C++程序时大概就越难避免C的风格,并会因此丢掉潜在的C++优势。这里有几个要点,在这些地方做同样的事情的时候,存在C++比C更好的方式:

[1].在C++里几乎不需要宏,用constenum定义明显的常量,用inline避免函数调用的额外开销,用template去刻画一族函数或类型。用namespace避免名字冲突。

 [2].不要在你需要变量以前去声明它,以保证你能立即对它进行初始化,声明可以出现在能出现语句的所有位置上,可以出现在for语句的初始化部分,也可以出现在条件中。

 [3].不要用malloc(),new运算符能将事情做得更好,对于relloc(),请试一试vector()。

 [4].试着去避免void *、指针算术、联合和强制,除了在某些函数的类的实现深层之外。大部分情况下强制都是设计错误的指示器。你如果必须使用某个显式的类型转换,请设法去用一个"新的强制"(即定义新的类型),设法写出一个描述你想做的事情更精确的语句。

 [5].尽量少用数组和C风格的字符串,与传统的C风格相比,用用标准库stringvector都可以简化程序。

1.6.2 给C++程序员的建议

 经常可以看到这种情况,有经验的C++程序员不公很多年没有注意引进的新特征,也没有看到特征之间关系的变化,而这些情况使一些全新的程序设计技术变成可行的东西了。换句话说,你在第一次使用和学习C++时没想到的或者不切实际的,或许今天已经变成了一种高明的方式。你只有通过重新考察基础的东西才能弄清楚它们。

1.8 忠告

写好一个程序需要智慧、品味和耐性。你不会第一次就把它搞好的。试验!

 [1].在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体的表示。让程序的结构尽可能地直接反映这些思想:

[a]如果你能把它看成一个独立的概念,就把"它"做成一个类。

  [b]如果你能把它看成一个独立的实体,就把"它"做成一个类的对象。

  [c]如果两个类有共同的界面,将些界面做成一个抽象类。

  [d]如果两个类的实现有某些显著的共同东西,将这些共性做成一个基类。

  [e]如果一个类是一种对象的容器,将它做成一个模板。

  [f]如果一个函数实现对某容器的一个算法,将它做成一个对一族容器可用的模板函数。

  [g]如果一组类、模板等相互之间有逻辑关系,将它们放进一个名字空间里。

 [2].在你定义一个并不是实现某个像矩阵的或者复数这样的数学对象时,或者定义一个低层次的类型如链表的时候:

 [a]不要使用全局数据(使用成员);

  [b]不要使用全局函数。

  [c]不要使用公用数据成员。

  [d]不要使用友元,除非为了避免[a]与[c]。

  [d]不要在一个类里面放"类型域";采用虚函数。

  [f]不要使用在线函数,除非为了效果显著的优化。

抱歉!评论已关闭.