c和c++在语言特性上有着本质的差别,前者是面向过程的,后者是面向对象的。
虽说用c也可以写出面向对象的代码,但是其表达性总是不如原生态的面向对象的c++方便。
众所周知的面向对象语言的几大特性:抽象、封装、继承、多态。
前三者c是可以比较容易做到的,但形式上总是不够美观:
比如在对象创建和销毁的过程中,c总是需要大篇的代码来做这个事情。
比如在调用的问题上,由于没有this指针,代码写起来很冗长,少了点面向对象的味道。
而在多态方面,c先天不足,实现起来又麻烦又怪异,在继承深度比较深的情形下,那简直就是灾难。
而多态这个语言特性恰是《设计模式》得以简洁美观有效描述的基石,看看书里面有多少次用到virtual这个关键字就知道了。
除此之外,面向对象语言的其它一些特性也令c望尘莫及,随便列举几个:
函数重载机制,c先天不足。
操作符重载机制,c先天不足。
析构,c先天不足。
访问控制,c先天不足。
异常处理,try catch throw是多么的简洁明了,而用c的setjmp longjmp机制经过异常复杂的封装,运用N多的编码技巧所实现的异常处理机制也只能是形式上类似面向对象语言的异常处理机制,而若要做到异常处理机制的多级继承那又是一场噩梦。
泛型编程,c先天不足。
...
说了这么多,核心意思就是:不要迷信于权威,不要迷信于高端,让正确的东西干正确的事,设计上保持简单但是不要太简单。
|