毕业之后一直做Java应用,很少接触C++的使用,所以对C++忘得很多了,但还是觉得C++在某些方面是不可替代的,最近又翻了一下C++的书,总结了一些C++和Java不同的地方罗列下面,个人理解,必有不是和遗漏之处,如发现请帮忙指出以改正
区别概述
|
Java
|
C++
|
面向对象特性
|
一切皆是对象,在Java中所有东西都在类中定义,没有全局变量和方法,没有联合枚举
|
面向对象和面向过程的并集,其程序可以含有非类属性和方法构造
|
继承体系的
|
单根继承模式,所有类都是Object的子类
|
类型间没有统一的祖先类
|
文件类型
|
所有类型文件均是.java类型文件,没有头文件。在Java中通过interface及implements完成接口及实现,并通过import引入需要的类
|
分为头文件,实现文件 C++中没有语法意义上的interface,而是用头文件收集对外提供的定义和声明,使用者再通过#include进行引入 |
操作符重载
|
java不支持操作符重载
|
C++支持操作符重载
|
运行环境
|
在java虚拟机上运行
|
直接在os上运行
|
继承
|
不支持多重继承
|
支持多重继承
|
程序入口方法
|
每个类都可以有main方法
|
只有一个全局main方法
|
多态
|
所有函数都是虚函数,不需要额外声明,在调用时自动进行动态绑定
|
需要用virtual声明类层次中的函数为虚函数
|
声明
|
没有方法和类声明,表示接口或实现不确定的可以用interface或抽象方法方式
|
必须先声明后使用,通常把声明放入头文件
|
资源导入
|
用"import 全包.类名"引入
|
用预编译"#inlude 头文件"引入
|
运算符
|
没有双字节运算符,因为所有对象都为引用方式,所以不区分对象绑定和指针间访操作
|
含有空间域操作符"::"和指针间访操作符"->"
|
基本类型
|
空间大小固定,char类型使用16位的Unicode表示,boolean和int不可自由转换
|
与平台相关
|
对象创建
|
对于所有不属于基本类型的对象,都只能通过new命令在堆中创建,但是不需要显式释放,GC可以自动完成垃圾收集
|
可以通过定义在堆栈中创建,在堆栈中创建的对象本体不需要显示释放;通过new创建的在堆中的对象,需要显式释放
|
命名空间
|
用包代替命名空间
|
|