抄来的:
C#是用来做应用程序和软件的,优点就是快速开发,有功能强大的.NET FRAMEWORK的支持.
而C/C++是用来做系统程序的,(也能做应用软件,但没有C#方便),优点很多,比其它的高级语言更容易对内存,以及作系统底层相关的开发,比起汇编语言,它具有良好的可移植性.
就看你是想发展哪方面了,还有一点不得不说,C#主要在microsoft Visual stdio.net下得以应用,目前不能在linux以及其它的操作系统下用(因为据我所知C#编译器只是在集成在.NET环境下有,其它的没有听说过),而且microsoft开发出来.net时说.net会牛十年,所以那个时候C#可能就不像现在这样作为市场上的主流开发语言了,它的结果如何谁也不知道,但是C/C++是纯粹就是一门计算机高级编程语言(其实它应该是介于汇编语言和高级语言之间的计算机编程语言),它没有局限在任何的OS,编译器,再加上其它强大的开发能力,是不会被淘汰的,计算机编程语言发展的规则是向更高级,易开发,更方便的方向发展的,不会再发展出一个像C一样的系统底层开发语言,所以学好C/C++还是很必要的,但如果你不想做这些系统底层开发工作,也就不用对C进行太深入地研究了,在编程方面应该对算法以及数据结构进行深入学习.
现在的高级语言如C#,主要把它的语法,也就是编程方法学会,然后对其编程机制进行一些学习就够了,重要的是其它的东西,如学C#更重要是的对.NET FRAMEWORK机制的了解,大部分的高级语言(C/C++/JAVA例外)就是这样,其实并不是特别特别重要,关键是编程思想
语法结构上,C++和C#基本上相同,只有以下方面有所区别:
1、继承:C++支持多继承,C#类只能继承一个基类中的实现但可以实现多个接口。2、数组:声明 C# 数组和声明 C++ 数组的语法不同。在 C# 中,“[]”标记出现在数组类型的后面。3、数据类型:在C++中bool类可以与整型转换,但C#中bool 类型和其他类型(特别是 int)之间没有转换。long 类型:在 C# 中,long 数据类型为 64 位,而在 C++ 中为 32 位。4、struct 类型:在 C# 中,类和结构在语义上不同。struct 是值类型,而 class 是引用类型。5、switch 语句:与 C++ 中的 switch 语句不同,C# 不支持从一个 case 标签贯穿到另一个 case 标签。C++的switch后跟参数必须是int型,而C#却允许string型6、delegate 类型:委托与 C++ 中的函数指针基本相似,但前者具有类型安全,是安全的。
7、C#中所有对象都只能通过关键词“new”来创建,C++的“类名_对象名”方式在C#中变为声明一个引用。
8、异常处理:C#中引入了 finally 语句,这是C++没有的,C++允许抛出任何类型,而C#中规定抛出类型为一个派生于System.Exception的对象。9、C# 运算符:C# 支持其他运算符,如 is 和 typeof。它还引入了某些逻辑运算符的不同功能。10、static 的使用:static方法只能由类名调用,改变static变量。11、C#在构造基类上替代 C++ 初始化列表的方法。12、Main 方法和 C++ 及Java中的 main 函数的声明方式不同,Main而不能用main13、方法参数:C# 支持 ref 和 out 参数,这两个参数取代指针通过引用传递参数。14、在 C# 中只能在unsafe不安全模式下才使用指针。15、在 C# 中以不同的方式执行重载运算符。16、字符串:C# 字符串不同于 C++ 字符串。17、C# 中没有全局方法和全局变量:方法和变量必须包含在类型声明(如 class 或 struct)中。18、C# 中没有头文件和 #include 指令:using 指令用于引用其他未完全限定类型名的命名空间中的类型。19、C# 中的局部变量在初始化前不能使用。20、析构函数:在 C# 中,不能控制析构函数的调用时间,原因是析构函数由垃圾回收器自动调用。
21、构造函数:与 C++ 类似,如果在 C# 中没有提供类构造函数,则为您自动生成默认构造函数。该默认构造函数将所有字段初始化为它们的默认值。22、在 C# 中,方法参数不能有默认值。如果要获得同样的效果,需使用方法重载。
c++在设计之初希望提供先进的面向对象特性,同时提供很好的性能。但是为了保证和以往的程序、开发人员的知识兼容,c++与c语言几乎完全兼容。c语言本身其实就是现代计算机的高级抽象,可以直接访问地址、通过指针可以访问几乎任何内存地址;堆和栈的结构体现等待。当然c++也就具有了这样的特性。随着 c++的逐步发展,generic programming 泛型编程技术和stl标准模板库的引入,c++和c的差异越来越大。基本上c++是为了高效地使用面向对象技术或者泛型技术编写大规模高性能应用程序(往往是一些相对比较底层的应用程序)而设计的。没有什么语言能比C++更加贴近Windows本身了,这一点也是不可否认的。C++更针对计算机的底层,而C#更注重对上层应用程序的支持。 目前绝大多数的大型游戏都是用C++做的,而网络应用、应用软件的半壁江山被C#和JAVA所占领。C#能做的,C++不一定都能做,C++能做的,C#也不一定都好做。
c#通过底层的虚拟机机制减少了c/c++语言中常常容易发生的内存泄漏和安全性问题,代价是运行速度减慢。同样的由于简化了编程语言的复杂性(c#远远比c++来得简单),大大提高了开发者的效率。另外c#具有.net庞大的类库,这个优势是c++所不具有的。因此c#非常合适开发企业中处理业务的应用程序。同时微软所有的操作系统、服务器程序、桌面端程序都在向.net平台统一。在历史上与次类似的情形(指微软技术)只有在微软从16位平台向32位平台转变的过程中发生过。
C# 是纯面向对象语言,C++ 除了面向对象,也面向过程。C# 支持垃圾收集,C++ 不支持垃圾收集。C#需要虚拟机器,C++ 不需要虚拟机器。C# 的执行档是中间码,叫做 managed code,透过 NGWS Runtime 来执行。除了 C#,你也可以用其它程序语言(例如 Visual Basic、C++)来作出 managed code。C# 使用 Platform-Independent Type,C++ 的 type 会受到平台的影响。
C#调用Win32 API的方式繁杂,C++这一点做得比它好。但是,C#强大的网络操作,代码量大大地低于C++,我们抛弃不用Socket,改用WinInet或是MFC中的封装好的网络类,比如CHttpFile,还是没C#简单。C#的傻瓜式的类库操作和面向对象编程的完美特性,确实让其成为了Windows平台上最受欢迎的语言。
C#中不通过Win32 API就那么一种方式,通过System.Diagnostics.Process找到进程,然后Kill之,而C++中,我们完全有无数种选择,如进程内存填0,卸载模块,消息洪水,句柄强制关闭,强制释放它的堆等等,甚至注入进去,内部Raise一个异常,它也就会结束。保护进程,不管内核下还是应用层,C#肯定是做不了的,C++有自己高端的地方,其他语言无法涉足。所以没有用C#做的杀毒软件就不足为奇了。
C#极其简易的界面操作,令人看着很舒服的编码,他有太多的地方,C++根本无法涉足。没人拿C++做Web Services,超级大量的数据,拿垃圾回收基本上为0的C++去做,简直就是自找麻烦。C#的WebForm,和Jsp占据着Web的大片江山,C++不能。C#是一门博大精深的语言,类库强大。C#更加注重于软件工程的应用,各种设计模式的使用,C++则注重于实现功能。
C#的前景是不错的,我个人很看好它,MSDN 杂志每期的文章可能有8成是C#,C++不算很多,微软的重心可能在C#上,希望C#逐渐能取代C++。但是C++会这么容易被取代?不可能。就像一个搞管理的,你让他接管搞开发的人,让他从干一样到同时兼干这二样,会有这么简单么?c++的生命力至少还要7-8年,之后才会渐渐的淡出,但是只要追求自由的人存在,C++就不会消失;只要操作系统一天是用C++写的,C++就不会消失。
开发数据库,倾向于用C#,做Windows底层,我肯定是C++。C#的Linq to Sql让不懂数据库的人都能去操做数据库了,辅助一些第三方类库,能发挥强大的威力。完全取代C++,等操作系统是C#写的,C#能开发系统中的一切组件的时候再说吧,至少现在C#还不能开发IsAPI、驱动。
C#相当于运行在.NET环境中的
如果把.NET比作一个小型系统,C#就是这个小系统中的程序,依赖于.NET存在。。。操作文件的时候是先经过.NET,再到系统。。
C++编译的程序是直接的二进制文件,直接作用于系统。。效率高于C#,难度也高于C#。。
但是C++几乎是无所不能的,C#的目的仅仅是快速开发桌面软件和网络应用~
C/C++是编程语言,C是C++的爸爸,也就是说C++从C发展而来,而C++完全兼容C的语法.国际上有一个专门管理C++的机构,它们负责C++的标准制定.
C#是微软的一种高级编程语言,是微软自己制定的标准,它只是采用了C++的少数特性,跟C++不粘边.C#的特点是安全,用它编制的程序,不容易崩溃.但它的执行效率只有C++程序的几十分之一.
C++默认使用非托管代码,也就是说可以直接访问内存但也要自己手动回收内存,C#只能用托管代码,new完后不需要delete,但从C++转C#后会发现很多在C++里用惯的技术在这里不能用了。