浅谈C、C++、C#的区别
C与C++的区别
1. C 语⾔是⾯向过程的,⽽ C++ 是⾯向对象的。
2,C 语⾔有标准的函数库,它们松散的,只是把功能相同的函数放在⼀个头⽂件中;⽽ C++ 对于⼤多数的函数都是有集成的很紧密,特别是 C 语⾔中没有的 C++ 中的 API 是对 Window 系统的⼤多数 API 有机的组合,是⼀个集体。但你也可能单独调⽤ API。
3,特别是 C++ 中的图形处理,它和语⾔的图形有很⼤的区别。C 语⾔中的图形处理函数基本上是不能⽤在中 C++ 中的。C 语⾔标准中不包括图形处理。
4,C 和 C++ 中结构体:C的结构体内不允许有函数,⽽C++的结构体内部允许有成员函数(允许有构造函数、析构函数和this指针),且允许这个函数是虚函数;C的结构体对内部成员变量的访问权限只能是public,⽽C++允许public,private,protected三种;C的结构体是不可以继承的,C++的结构体是允许从其他结构体或者类继承的;
4,C 语⾔可以写很多⽅⾯的程序,但是 C++ 可以写得更多更好,写 DLL,写控件,写系统。
5,C 语⾔对程序的⽂件的组织是松散的,⼏乎是全要程序处理;⽽ C++ 对⽂件的组织是以⼯程,各⽂件分类明确。
6,C++ 中的 IDE 很智能,和 VB ⼀样,有的功能可能⽐VB还强。
7,C++ 对可以⾃动⽣成你想要的程序结构使你可以省了很多时间。有很多可⽤的⼯具如加⼊ MFC 中的类的时候,加⼊变量的时候等等。8,C++ 中的附加⼯具也有很多,可以进⾏系统的分析,可以查看 API;可以查看控件。
9,调试功能强⼤,并且⽅法多样。
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#会禁⽌所有ase语句的失败情形,除⾮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#⾥有静态构造函数⼀个概念,这个构造函数只执⾏⼀次,因此能够保证⼀些静态成员只被初始化⼀遍。
c语言和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 绑定。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论