C++与JAVA的区别
转自百度文库http://wenku.baidu.com/view/71b04eebe009581b6bd9ebfc.html
1.Java没有显式指针,尽管它广泛地在内部使用,但那不是给程序员用的。而在C++中却可以用。
2.Java是主动多态的,你不用关心具有继承关系的多个类之间的同名成员函数会调用哪个,Java会主动地从祖父类、祖祖父类……追溯至最高一级父类,然后从上至下开始寻找并调用。C++不会主动使用多态,要使用多态,就要用虚函数。
3.Java是隐式继承的,你不说你是谁的子类,那么你就是Object的子类,甚至你说你不是类都不可以,你必须是类,然后才能谈到实例化的对象。这时,Java看上去是强制面向对象。C++却把话都说明白了,你继承谁就继承谁,继承多个都可以,你什么都不说那么就不继承。但是C++当中,不继承不代表不能被继承,实际上C++禁止这么做。原因前面已经说过了,C++是被动多态的。你不用virtual去修饰基类的成员函数,程序执行时函数调用就不会自动调到派生类。
4.Java有接口,C++中却没有。这不是说C++不好,只是C++没有明确提出这样一个概念。C++中定义一个抽象类,把成员函数设为常量,并改成纯虚函数,数据域也设成常量,那么在C++中这样的抽象类就是接口。你可以说它不是,因为C++中没有接口,但是我要说明的是,C++可以做出一个接口来。
5.Java是单根继承(Single inheritance)的,但是允许一个类实现多个接口。C++却支持多继承,尽管很少有人去用它。
6.Java和C++最显著的区别体现在对象的处理上。Java中,对象变量在内部被当作指针处理。Java文献指出将对象变量作为引用,不过它们与C++中的引用并不完全相同。所谓引用,就是一个介于指针和变量之间的东西。
7.Java中所有的函数都与类相关,没有全局变量和非成员函数,而C++却支持这些。从这个角度上讲,C++又是强制面向对象的。因为C++当中可以没有类,即使没有类,程序依然执行得好好的,并且在程序设计的功能很少的时候,我就喜欢这么干。偶尔面向过程编程,又有什么不好呢?
8.C++中,你使用的动态内存怎么用就怎么还,Java中你不用管,Java包含一个垃圾收集系统,作为运行时库的一部分。它会监视正在运行的程序,当内存不足的时候自动去回收它,当然你也可以干预这个过程,不过如无必要,你不必惦记这件事,Java总会把你的硬件想象得比较好,不到万不得已不回收动态内存,这也解决了C++程序的内存泄漏问题,虽然这是程序员自己的不负责任。
9.Java有很紧凑的异常处理机制,而C++稍微显得草率了一些。但是这并不代表C++异常处理机制不强大,因为Java只能抛出Throwable子类的异常,C++却什么都可以。
10.Java标准库又是Java庞大的体现,涵盖了国际化、网络化、数学、声音、Web应用和服务以及数据库等。你可以说Java语言在JSP、JavaScipt、网络编程、分布计算交易管理应用、Java ME应用、Web应用上风光无限,说Java是一门小巧的语言,但是Java的小巧也主要就小巧这些方面。