分类: C/C++
2012-12-18 01:35:10
C++是一门美妙的语言,也是一门复杂的语言。有多少理由,我们可以用来唾弃它,但有更多的理由让我们选择它做为我们的开发工具。
老实说,工作了这么多年,真的很少见到C++高手,我也算是工作在好几个领域数一数二的公司了,但是真正完全懂得用C++做设计的工程师,少之又少。比如我现在的公司,就有人说过这样一句话“我原以为我的C++不怎么样,没想到来到这家公司后,我竟然变成了C++高手。”反而,在一些小公司里,或者从小公司出来的工程师,对C++的掌握程度却非常好。
C++确实是一门易学难精的语言。它包含的内容太多了,而且这些内容,我们又可以从不同的角度去理解,度量它们。所以有时候我们自以为已经掌握了它,其实还远呢。
我用C++也很多年了,用它写过基础库,开发过软件模块,开发过framework。总的看来,C++的确比较适合作为这些基础软件模块的开发。
但是,C++有是一门极容易被误用的语言,对同一条语句,不同程度的人可以有不同的理解,比如:
纯虚函数:
从编程的角度,我们可以解释它为,其子类必须提供一个实现,否则不能被具现化;
从设计的角度,我们可以解释它为,这个特性每个子类必须根据它们的具体情况,提供一个实现,否则其子类不能成为一个合格的对象。
乍一看,它们没什么区别,其实它们正反应了每个人对C++的理解程度。
我们必须转变思想,不能再沿用C的思想去用C++编程,这样,你永远也得不到提高。C++提供的每个特性,并不是为了我们编程的方便,而是为了使我们可以得到严谨的“设计”和“约束”。为什么需要“约束”?因为你不用语言层面的约束,别人就可以天马行空的改变你原来的而设计思想,你没法控制别人怎么做。除非你把你的约束明确的用语言表达出来。
比如,某个类的对象,必须通过一个第三方函数来具现,你就不能把这个对象的构造函数放在public域。
比如,在某个类的继承体系中,某个函数,必须在叶节点类中提供特定的不同的实现,这样,你就应该把它设置成纯虚。
对C++来说,还有一条是非常重要的,就是我们必须遵守一定的设计准则,规定我们不能做什么,必须做什么。比如:不在在构造函数中把this指针导出去,比如我们不能再constructor中调用虚函数等。有很多,我还没有总结好,就不写在这里。
我们要熟悉各种C++特性,还要了解这些特性都适合使用在哪些地方。这是很重要的。
设计模式,这是最重要的,要使用C++,你就必须了解各种设计模式。这也是C++和C最大的不同。如果一个不了解设计模式的人说它精通C++,马上把他丢出去,别出来丢人。这就好像一个建筑设计师,说他不懂建筑设计模式一样(欧式的,罗马式的)。
所以我把C++程序员分成三类:
1. 初级C++程序员:完全用C的思想写C++程序的人。比如说全篇的static函数, 他不知道用一个类包含他们,然后定义一个全局的类对象。
2. 中级C++程序员:会用C++编程的人。这类人已经掌握了C++的各种特性,也知道如何使用它们,但是仅仅是使用它们编程。
3. 高级C++程序员:会用C++设计。这类人已经掌握C++各种特性,并且知道什么地方使用什么特性进行设计。它们使用这些特性的目的是设计,而不是编程。
写到这里,我想大家也许明白了一点,很重要的一点,它就是面向对象的编程,首先是要面向对象设计。先设计,再编程。这和C这类面向过程编程语言不同。
让我们来评价一下什么的C++程序员吧。