C++和C#的区别和联系

C++和C#的区别和联系
c 构造函数 c语言
语法结构上,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、驱动。

转自:http://jasonshieh.iteye.com/blog/1005113
时间: 2024-07-30 07:19:01

C++和C#的区别和联系的相关文章

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

mysql中int、bigint、smallint和tinyint的区别与长度

对比发现 int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int             -------     int(11) bigint       -------     bigint(20) smallint   -------     smallint(6) tinyint     -------     tinyint(4) 下面是这几种类型的取值范围 参考:http://www.2cto.com/d

call和apply和bind的区别

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」. apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组function.apply(thisobj, args) 或者 function.apply(thisobj, args) 1.thisobj

mybatis中"#"和"$"的区别

mybatis中"#"和"$"的区别 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}. 在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别: select * from user where name = #{name}; select * from

mybatis与hibernate的区别

本文转载自:http://blog.csdn.net/wangpeng047/article/details/17038659 以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动. hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调

while与do while 区别 for循环的简介及break和continue的区别

do while 循环和while循环的区别   1.do while循环是先执行循环体,然后判断循环条件,如果为真,则执行下一步循环,否则终止循环:    while循环是先判断循环条件,如果条件为真则执行循环体:   2.do while循环条件后面必须有一个分号,这个分号表明循环结束. 1.for循环 for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环.do-while循环. for循环的格式为: for( 初始语句  ; 执行条件  ; 增量 ) { 循环体