wwh1991411 发表于 2009-4-6 12:15:07

请问C#跟C++的区别在那里?

我现在在学习C#
但我看这个论坛上没有C#
好多C++
C#是不是淘汰了?
还有请高手指点下怎么学习C#才能不那么累啊!

王梦瑶 发表于 2009-4-6 13:03:38

在百度上给你找的
1、C#是.net平台下支持较为完整的语言,天生就是为.NET平台服务的,C++在.NET平台下的支持相对就差一点,再加上如果进行托管代码的编写,托管 + C++ == 怪胎,C++天生的底层特性好像才.NET下水土不服,虽然现在有C++/CLI,但是到底有多大的价值,还不确定

2、.NET的内存分配有专用的垃圾回收机制,不需要担心内存的泄漏问题,不知道是不是仅仅指在托管堆中分配的。编译时.NET平台将所有东西编译成IL的东西,然后通过一个编译器再去编译那个中间代码执行,感觉象解释语言,据说也更好破解了,中间代码基本上跟源代码差不多,总之肯定比汇编容易。

3、C#中不再使用指针,也就是->不会在C#中出现,不过又搞出来一个delegate的东西,不明白

4、C#中不存在全局变量,任何东西都要属于一个类,连main都在类里,还是这样子Main,看着怪怪的

5、搞出来一个System.Console的东西来输出控制台的东西,而且格式化字符串好像只能格式化三个变量,还是习惯printf(StringCchPrint)来输出

6、多了个decimal数据类型,来表示货币,暂时还没看出来方便到哪儿了。还多了byte类型表示一个字节,bool类型也只能用true和false来赋值拉,更规范一点。字符类型char来表示UNICODE的字符,代表两个字节了,感觉更怪,还是WChar习惯点

7、发现一个转义字符’a’ (感叹号),不知道用来干嘛

8、还有一个object的类,说所有的类型都是基类,感觉比较象variable类型。然后后边又说了一个装箱和拆箱,实际就是在进行拷贝构造,然后在进行值拷贝,暂时没看到有什么不一样。

9、array的声明怪怪的,a这样的不能用了??只能用int a[][]= new int的样子??那种可动态生成数组长度的东西,好像只是定义了一个类似的数组指针嘛,还得new一下赋值

10、is操作符和as操作符,is操作符进行类型判断;as用来进行类型转换,类似强制类型转换,区别是转换失败返回NULL,不产生异常

11、它说new操作符进行实例的创建,并不一定暗示动态内存分配,跟C++的不同,没搞明白

12、typeof返回系统原型对象的类型,看它的例子是返回个字符串

13、checked 、unchecked,溢出检查,unchecked包含的表达式忽略溢出检查

14、if语句的判断必须是布尔型,不能写if(int)的形式

15、switch语句的每个case后边必须有break或者goto,带goto看着很奇怪。switch可以用字符串做为判断条件。

16、一个怪怪的foreach语句,那个集合的意义还没有搞清楚

17、域和属性,域跟c++的成员变量概念一样,属性定义get和set方法,使用的时候感觉很象这个变量就是public的,看着还是怪

18、事件和索引器没看明白,事件有点象MFC的事件,但是事件是谁触发??如果是其它类显式的发消息出发事件,为什么不直接调用??感觉对方法也封装了一次,难道以后为了方便更改事件的处理方法???

19、抽象类的声明方法,C#必须用abstract关键字,C++只要包含纯虚函数即可

20、密封类防止类被继承,多此一举?保护知识产权? 密封方法防止方法被重载


C#跟C++差别还是挺大的,特别是接口的部分,至于语法也仅仅是轻微的调整

从学习难易的角度来看:C++较难。C#较容易些。但是,C#是典型的易学难精通,C++是难学易用的。(这句话可能有争议,但是朋友们可以自己体会下)
从学习的用途来看:C#在RAD领域,可以说是无敌的。
C++在高性能的服务应用,无人可比。
C++中OO是最好的。掌握了它,C#和JAVA马上可以上手。

下表包含 C++ 和 C# 功能之间的重要比较。如果您是一位 C++ 程序员,此表将为您提供这两种语言的最重要差异。
注意 C++ 和 C# 项目派生于不同的项目模型。有关 C++ 和 C# 项目之间差异的信息,请参见项目中的项管理和使用解决方案资源管理器。
功能                              参考主题
继承:         类只能继承一个基类中的实现。另外,类或接口可以实现多个接口。
数组:         声明 C# 数组和声明 C++ 数组的语法不同。在 C# 中,“[]”标记出现在数组类型的后面。
bool 类型:    bool 类型和其他类型(特别是 int)之间没有转换。
long 类型:    在 C# 中,long 数据类型为 64 位,而在 C++ 中为 32 位。
struct 类型:在 C# 中,类和结构在语义上不同。struct 是值类型,而 class 是引用类型。
switch 语句:与 C++ 中的 switch 语句不同,C# 不支持从一个 case 标签贯穿到另一个 case 标签。
delegate 类型:委托与 C++ 中的函数指针基本相似,但前者具有类型安全,是安全的。
               从派生类调用重写基类成员。

使用 new 修饰符显式隐藏继承成员。
声明重写方法需要有 override 关键字。
预处理器指令用于条件编译。C# 中不使用头文件。
异常处理:使用 finally 语句。

C# 运算符:    C# 支持其他运算符,如 is 和 typeof。它还引入了某些逻辑运算符的不同功能。

关键字 extern 的使用。
关键字 static 的使用。
在构造基类上替代 C++ 初始化列表的方法。
C# 程序的常规结构:命名空间、类、结构、委托和枚举。
Main 方法和 C++ 中的 main 函数的声明方式不同。


方法参数:   C# 支持 ref 和 out 参数,这两个参数取代指针通过引用传递参数。

在 C# 中只在不安全模式下才使用指针。 unsafe
在 C# 中以不同的方式执行重载运算符。


字符串:       C# 字符串不同于 C++ 字符串。 string
foreach 关键字使您得以循环访问数组和集合。 foreach, in
C# 中没有全局方法和全局变量:方法和变量必须包含在类型声明(如 class 或 struct)中。
C# 中没有头文件和 #include 指令:using 指令用于引用其他未完全限定类型名的命名空间中的类型。
C# 中的局部变量在初始化前不能使用。
析构函数:在 C# 中,不能控制析构函数的调用时间,原因是析构函数由垃圾回收器自动调用。
构造函数:与 C++ 类似,如果在 C# 中没有提供类构造函数,则为您自动生成默认构造函数。该默认构造函         数将所有字段初始化为它们的默认值。

C# 不支持位域。 C++ 位域
C# 的输入/输出服务和格式设置依赖于 .NET Framework 的运行时库。

在 C# 中,方法参数不能有默认值。如果要获得同样的效果,请使用方法重载

wwh1991411 发表于 2009-4-6 14:44:10

其实我现在我专业是。net也就是dotnet
目前学了半年
学了计算机基础、office办公、html
数据库、现在学的就是C#
但好多人学的都是C++
没见网上谈论C#
所以有点担心我现在学的C#没用!

Daniel 发表于 2009-4-11 11:14:49

就是不知道是C#好呢 还是C++好

学徒 发表于 2009-4-29 19:01:06

c#是不错的

   “计算机语言的发展历史也是人们不断追求更高的模块化、抽象化和封装化的历史。近十年期间,很多编程语言,从出现到没落经过了一波又一波。像1970年代出现的Pascal,如今用的人已经不多了。”一位资深程序员告诉记者,“‘算法+数据结构=程序’几乎成为软件开发的惟一准则,结构化程序设计方法从计算机发展角度来看是自然而然的,但今天从抽象的角度来看,这种方法几乎可以说是一个‘时代错误’。实际上,软件开发的主要目的就是描述和反映现实世界,结构化程序设计方法并不符合这个思维方式。”
  
   因此,抽象的过程应该是以现实世界的对象为中心的,于是面向对象的抽象方法就走到了前台,出现了Visual Basic、Delphi、C++以及Java等面向对象的编程语言,而互联网的勃兴,则给Java的成长带来了肥沃的土壤。
  
   “Java诞生时并没有引起太多人的注意,它第一次让人们觉得惊艳是在一次网站演示上,但当时人们对Java还抱有很大的争议。”被誉为“Java之父”的SUN公司副总裁、软件部首席技术官James Gosling回忆起十几年前的情景不无感慨地说,“但Java的出现为当时的互联网增添了生机,它让那些静态的页面动了起来。”
  
      而且,因为Java具有“只写一次,随处运行”的特点,从而引起了更多开发者的兴趣。
  
   “我们可以不必再做重复性质的劳动了。”中国科学院软件研究所宋靖宇博士说,“此前,为了能够使程序在不同型号的硬件平台上运行,开发人员必须耗费大量的时间来一遍又一遍的编写代码,然而Java改变了这样的局面,只写一次就可以。”
  
  
   由于看到Java在互联网时代的巨大作用,清华大学计算机系教授王克宏从1995年就开始跟踪Java的发展。
  
   Java语言的优势似乎是与生俱来的,然而,仅有语言是不够的。
  
  免费的Java创造了应用奇迹
  
   “为了提高软件开发效率,任何编程语言都离不开相应的开发工具和程序库。”王克宏说。于是,SUN公司在1996年的1月23 日发布了JDK1.0,其中包括两个部分:运行环境和开发工具,运行环境包括五大部分:核心API、集成API、用户界面API、发布技术和Java虚拟机。
  
   随着各种功能的完善与提炼,各种Java开发工具以及开发环境的丰富,Java不再是一种语言的代名词,它变成了一种开发平台。人们常常听到的J2EE(企业版)、J2ME(微型版)、J2SE(标准版)就是Java的三大核心平台。利用这三种不同的平台,人们可以来做不同行业的应用。
  
   SUN公司大中华区总裁余宏德说:“Java经过十年的发展,已经得到了全球的公认,可以说,当今的电子时代是‘Java无处不在’,正是基于它一开始的技术公开性,Java已经变成全球最富有活力的技术社区之一。”
  
   尽管,Java目前已经风靡全世界,但Java 到底给整个产业带来什么,除了Java程序员外,似乎没有人能具体感觉到。
   SUN中国区市场经理马君海比喻说:“电灯的发明,使得有了现在庞大的电力产业;电话的发明,使得有了当今兴旺的电信产业;而Java的发明,则给软件产业带来了前所未有的改变。”
  
   像一切新兴事物一样,Java的发展并不那么顺利,其坎坷起步的经历,可以从SUN首席执行官Scott McNealy在SUN的Java One大会上的一句话得知一二:“七八年前的Java One演说现在听起来真是寒碜,我们那时实在是太小看它了,我们根本不知道这项技术将会改变什么。”而且,由于开始就是基于开源的态度,当时很多人怀疑它是否能赚钱。
   然而,今天的Java已经得到广泛应用。
  
  
   据全球市场调查分析显示:已经有25亿部电子设备采用了Java技术,Java智能卡发行量已经达到10亿张,采用Java技术的手机达7亿多部,7亿台PC中应用了Java技术,140家电信运营商支持Java 技术,全球有超过450 万个Java开发人员,JCP(Java社区项目)已经有912家会员企业。
  
  如果没有Java,SUN将会怎样
  
   从1997年4月6日美国旧金山的第二届Java One大会,到今年的Java十周年盛事,本报目睹了Java 十年的风风雨雨,眼瞅着这个以“咖啡”命名的小小编程语言变成了一个平台,一个社团,一个生态系统。Java不仅发展了自己,也同时改变了它的缔造者。Java对SUN的改变是间接的、渐进式的,有时候甚至不为外人所道也。
  
   与平台无关的Java旨在与“锁定用户的”Windows相抗衡,给人们更多的选择,但推动Java研发的却是家硬件公司――硬件公司与微软抗个什么衡?也许有人会拿IBM做类比――IBM也大量涉足软件。问题在于,IBM涉足软件的结果是把自己变成了一个软件和服务公司,而SUN的主业依然是服务器。表面上看,“纯软”的Java并没有给“偏硬”的SUN带来直接效益,反而树了个强大的敌人,这就是并不“软”的微软。
   同时,尽管SUN对Java的投资巨大,却从没说过它从Java中获得过多少回报。因为使用Java程序和开发工具包是免费的,这让那些利用Java做第三方开发的ISV们赚了个钵满盆满,可是SUN得到了什么?当然,Java作为高级编程语言,它的注册和维护也能给SUN带来一定收入,但这是一个小头,有人比喻说:“SUN成了Java的管家,而不是主人。”
  
   SUN大中华区市场总监李永起近日为记者揭开了Java与SUN的秘密:“如果SUN只是一个做服务器的公司,人们就不会对我们太感兴趣,但有了Java,就大不一样了,人们会跑过来与我们讨论Java,人们会说:‘哦,能研发出Java这么棒的编程语言的公司一定不同凡响!’况且,服务器的销售从来就不是孤立的,它体现为一个系统,Java在硬件销售中发挥了关键用。”SUN用 Java来定位Web服务,发挥其多平台对话的特长,营造Web服务环境。
  
   Internet让Java复活,Java则拯救了曾经陷入“偏硬”困境中的SUN。
  
   SUN董事长麦克尼里认为:Java带来的益处从根本上讲是间接的。“但是,”他说,“想像一下,如果10年前SUN没有做Java,今天SUN将会在哪里?如果人们不写Java Web服务,他们会写.Net的程序,如果他们写.Net的程序,他们就不会为SUN的设备写程序。”
  
  
  .NET不折不扣的对手
  
   近年来,国内一批软件公司都采用Java技术开发了一批软件平台和产品,这两年Java在国内得到了迅速发展。不过,尽管看起来Java的队伍似乎很强大,但国内Java人才相对而言还是少得可怜。
  
  
   “SUN在新加坡建立了Java高级培训中心,目前新加坡有5万名Java 人才,而新加坡全国只有380万人,即全国1.3%的是Java人才,如果按此比例,中国应有1700万名Java人才,而现在估计仅10到15万人。”王克宏教授在相关的报告中写道,“造成国内Java应用不多的原因是多方面的。”
  
   “这两年SUN才开始在中国举办各种活动,而许多媒体对Java的不关注也是其中一个原因。”王克宏说。
  
   “其实,鉴于Java出来时总给人阳春白雪的面孔,使得国内的许多编程者在熟悉了微软的开发平台后,很难转换过来是其中的一大部分原因。”宋靖宇博士说,“你不得不承认微软在开发工具上的人性化以及可视化设计是高超的。”
  
  
   “在讨论 Java 的时候我们很容易将 Java 语言和 Java 平台混为一谈,与.NET 平台比较的过程中,也更多的是将Java平台和C#比较,或者将Java语言和.NET 平台做比较,在我个人的意识中,这是不够公正的。”上海大学博士刘锬对记者说,“Java既是一种语言,也是一种平台。”
  
  
   说到微软的.NET,它从提出的开始就是立足平台,相对于 Java 提倡的“一次编写,到处运行”,.NET则提倡“一个平台,多种语言”,因为平台的统一性,因此在各个程序语言的兼容性和混合开发方面做得比Java 好,也因此有些微软的“粉丝”嘲笑Java是“一次编写,到处调试”。
  
  
   “微软的C#是集合了C以及C++甚至Java的许多优点的结晶,在Windows平台上,似乎C#在运行速度上更胜一筹。”刘锬介绍说,“在任何一个平台上,我们直接交流的是实现Java语言运行的虚拟机,我们希望Java在虚拟机以及它的开发平台的研发上变得更易用、更人性化。”
   “有对手总是一件不算坏的事情,这个世界不需要‘独孤求败’,商业规则也不允许‘独孤求败’的出现,因为那样会打破竞争格局的平衡,而Java和.NET这两个平台的纷争才刚刚开始。较量,有利于整个软件世界。SUN公司在商业模式的运作上甚至可以跟微软学习。”
 
页: [1]
查看完整版本: 请问C#跟C++的区别在那里?