C#与C++区别

1.C# 与 C++ 比较的话,最重要的特性就是 C# 是一种完全面向对象的语言,而 C++ 是既面向过程又面向对象的语言,另外 C# 是基于 IL 中间语言和 .NET Framework CLR 的,在可移植性,可维护性 和强壮性都比 C++ 有很大的改进 

  ([1]C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

    [2]面向对象主要是说,在系统设计和实现上用的思想,面向对象的思想的运用,就是先从系统需求中确定类,然后按类实例化对象,对象之间的通信就实现了系统的功能。

    [3]面向过程,即系统的实现是分过很多按流程或工序设计的不同功能(函数)来实现,就是先干什么,后干什么,主要是靠函数的调用,因为面向过程没有对象,所以这些函数不属于任何对象,没有封装、继承等的灵活运用,系统一旦庞大,其设计和实现的复杂性和可控性跟面向对象不是一个数量级的。)

2.C#不支持多重继承,这是与C++明显区别的地方.

3.在标准的C#安全代码中不支持指针类型的操作,然而,你却能在微软所谓的“非安全代码”中操作指针类型对象。 

4.C#中所有对象都只能通过关键词“new”来创建C++的“类名_对象名”方式在C#中变为声明一个引用。呵呵,万物皆对象,连常见的数据类型都变为对象了,JAVA味道很浓。

5.在C#里面,数组的元素都是存放在托管堆里面,比起C++的在内存里不确定位置申请一块连续空间要安全得多。

6,C++的switch后跟参数必须是int型,而C#却允许string型,这点改进觉得真的是比以前方便多了!

7.C#会禁止所有switch..case语句的失败情形,除非case语句后是空格,否则执行了前一个case语句就算没有break也会停止执行后面的case语句。

8.在异常处理上,C++允许抛出任何类型,而C#中规定抛出类型为一个派生于System.Exception的对象。

9.C++的宏在C#中被抛弃了很多,而且也不建议使用,因此很少见。

10.C++的模板在C#里没有了,但在C#中我们找到了能完成模板任务的更锋利的武器:委托。

11.C++的全局变量这一概念没有了,C#和JAVA类似,要把所有东西都放在类里面,还建议使用命名空间包含起来。

12.C#可以在定义类的时候直接给属性赋值,而C++这么做却会编译出错。

13.C#里有静态构造函数一个概念,这个构造函数只执行一次,因此能够保证一些静态成员只被初始化一遍。

14.C#有自动垃圾收集机制,防止内存泄露,把C++程序员从繁重的内存管理上解放出来。

15.更强的类型转换保护机制,比如说把float转成uint,直接转换0.35会变成0.34,是因为二进制无法表示这样的数字,使用System.Conver里的方法,可以安全地把类型安全转换过来。

16.委托与事件、装箱与取消装箱、Web Services……一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。 

17.C# 的设计目标是用来开发快速稳定可扩展的应用程序,当然也可以通过 Interop 和 Pinvoke 完成一些底层操作,但是对于一些和底层系统相关很紧密的程序(譬如说驱动程序),还是建议用 C++ 来写 
18.C++ 不允许在一个构造函数中调用另外一个构造函数(称为委派构造函数调用),而 C# 则允许。委派构造函数调用语法上非常自然和易懂,事实上, C++ 不提供这一特性并不是出于语法上的考虑,而是出于资源管理的考虑(这样的事情对 C++ 来说还有很多很多)。 
C++ 的构造函数用于分配资源,而析构函数用于释放资源,构造函数和析构函数调用必须匹配,否则就打破了 C++ 的基本规则。如果允许委派构造函数调用,则显然会打破这一规则——构造函数被执行两次,而析构函数只执行一次。当然,对一些类,例如前面的那个 Point 来说这不是个问题,但是从语言机制的角度讲这个特性可能属于“危险”的特性。注:在最新的 C++ 标准提议草案中,Herb 等人有一个关于允许委派构造函数调用的提案,当然这很大程度上是为了方便 C++ /CLI 绑定。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SorrySorry,Sorry,作Sorry,作为Sorry,作为AISorry,作为AI语Sorry,作为AI语言Sorry,作为AI语言模Sorry,作为AI语言模型Sorry,作为AI语言模型,Sorry,作为AI语言模型,我Sorry,作为AI语言模型,我不能Sorry,作为AI语言模型,我不能确定Sorry,作为AI语言模型,我不能确定您Sorry,作为AI语言模型,我不能确定您问Sorry,作为AI语言模型,我不能确定您问的Sorry,作为AI语言模型,我不能确定您问的 “Sorry,作为AI语言模型,我不能确定您问的 “cSorry,作为AI语言模型,我不能确定您问的 “c”Sorry,作为AI语言模型,我不能确定您问的 “c” 是Sorry,作为AI语言模型,我不能确定您问的 “c” 是什Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回答Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回答您Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回答您的Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回答您的问题Sorry,作为AI语言模型,我不能确定您问的 “c” 是什么含义。如果您提供更多的背景信息,我将尽力回答您的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值