每次参加面试,都毫不例外的被问到这个问题。而自己也每次都毫无例外的胡言乱语一通,最终自己都不知自己所云。。。我真的怀疑面试官是否自己清楚这个问题的答案,但在我看来,这样的问题或许只有Bjarne博士级别的人才有资格来给出个标准答案,最次也得侯捷大哥这样的大牛来简单论述一下吧。
哎,鉴于自己还是要参加面试,确定一定以及肯定还是要被问到这个问题,所以就在网上摘抄一些记在这里。再被问起,就让他参照哥们的BLOG去。
讨论语言的区别无非要从以下几点区分:
1. 语法
c++是c语言的一个超集,所有的c语言语法规范,c++都支持,并提出了很多c不支持的面向对象的概念:类、继承、多态、重载。。。
2. 设计思想
这个最明显的区别了,回答这个问题的第一句话基本应该都是:c是面向过程的编程语言,c++是面向对象的编程语言(还不是纯的)。C是一个结构化语言,如谭老爷子所说:它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。
3. 效率
这个问题不好说,好像每个人都知道用c++写出来的程序比用c写的运行慢。但具体原因又很难说(至少我没有找到让人信服的说法)。
从答案推原因,我个人能想到主要有两点吧:一个是c++语言对对象的构造,析构,尤其是复杂对象(深度很深的子类对象或者包含很多其他对象的对象),花费了大量时间。。。另一个是c++支持RTTI,比如虚函数,c++只有到运行时才能确定调用的函数地址,而c语言的函数地址则在编译的时候就确定了。所以c++要慢一些吧。
以前在这个论坛上看到一个讨论帖,也是面试时碰到这个问题,面试官给了个因为流水线的答案。神啊,救救我吧!
4. 运用
c++由于它的面向对象特性,易于扩展和维护。尤其配套的有哪么多的设计模式,所以利于设计开发那些大型的应用软件。而c语言由于其高效特性,在对嵌入式软件,尤其driver层次上的开发,有着得天独厚的优势。当然很多牛人可以把面向对象的思想用在c开发上,那就perfect了。
暂时能想到的就这些了,感觉还有很多东西值得说出来,但真正的要写出来又无处着笔了。就先记这些吧。最后如果以后再碰到这个问题,不知道象下面这么回答,面试官会感觉如何?
don't care about what's the different, just use it.