先从C开始说起,它通常在底层,写一写驱动逻辑等等的代码。所谓嵌入式,一般都是C的,学好C,必然离不开数据结构,很多初学者认为C和数据结构是一码事。其实数据结构更多的是一种思想和算法。里面的数据结构,列表,堆栈,树,其实在其他语言也都有使用,只是被封装好了而已。个人总结下C的优点:很清晰,逻辑性相对来说非常强的,更好的与硬件设备打交道(当然C++有时也可以)是因为有指针。缺点,学习难度比较大。

   这里有个误区,我觉得我有必要阐述一下,很多人一听到C就是面向过程得,一听到C++,java就是面向对象的。其实这是一个误区,面向过程亦或者说是面向对象完全是我们程序员的思想,语言本身只是一种工具,C也可以面向对象,同样java也会被不好的程序员来面向过程。


C和C++:

   C和C++区别其实蛮大的,首先C++可以很容易的面向对象,C可以面向对象,但非常复杂。主要是因为有了类。所以在应用场合会有比较大的不一样。由于C++的特性,所以它既能进行高效的业务处理,也能有比较好的界面表现。例如我们常用VC++去开发一些windows应用,用qt写linux的应用,C就相对吃力很多了。

   C++本来说是对C的继承和加强,它有C的指针,运行高效,同时又能方便的面向对象。但是正是由于C++的这些特性,使得C++成为了一个介于C和java之间的一个“不伦不类”的产品(个人看法)。


再看C++和java吧:

1:大家都知道,java是跑在虚拟机上的,所以具备了比较好的平台移植性,很多C++的朋友要不爽了,C++也是有很好的移植性的。好吧,这个很难界定,但是,我们使用C++去写代码的时候难免会使用到一些操作系统的api,这时候就会出问题了,例如在linux下开启线程和windows下是不一样的,文件操作,等等等等,如果你都使用的自带的库文件,那的确移植没有问题。综上,我们还是可以看出java相对C++比较优秀的可移植性的。

然后,正是由于java使用了虚拟机,所以导致了它的效率远远的低于了C++。

2:C++保留了指针。我们都知道,C++是可以直接去使用指针的,说实话指针这玩意儿真是一个叫人又爱又恨的玩意儿,它用的好,效率大大的提高。用的不好,会导致系统的崩溃。而java的虚拟机为我们把这些东西都封装好了,所以我们在使用java的时候虽然会报一些空指针异常,但是确实让程序健壮了不少。

3:c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。

4:Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

5:内存管理。我们在c++中可以直接手动的释放内存,但是java做不到,它的垃圾是有虚拟机去回收的,不需要程序员去操作。

6.操作符重载。 Java不支持操作符重载。操作符重载被认为是c++的突出特征,在Java中虽然类大体上可以实现这样的功能,但操作符重载的方便性仍然丢失了不少。Java语言不支持操作符重载是为了保持Java语言尽可能简单。

7.预处理功能。 Java不支持预处理功能c/c++在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)c++预处理器的功能类似。
8. Java不支持缺省函数参数,而c++支持。 c中,代码组织在函数中,函数可以访问程序的全局变量。c++增加了类,提供了类算法,该算法是与类相连的函数,c++类方法与Java类方法十分相似,然而,由于c++仍然支持c,所以不能阻止c++开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
Java没有函数,作为一个比c++更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
9. 字符串。 cc++不支持字符串变量,在cc十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinRstringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)Java字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用进行连接操作。
10. “goto语句
可怕goto语句是cc++遗物,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
l1.类型转换
cc++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。