C++与C#的比较
来源:互联网 发布:python编写远程控制 编辑:程序博客网 时间:2024/06/07 03:02
今天听米老师讲C++课,印象很深的一句话是“学会用相似,掌握好不同”,所以就想着可以把已经学习过的C#和现在要学习的C++进行一下对比,可能学起来会更容易一些(由于C++学习的还不是很深入,所以好多东西是从网上查的)。
c#和c++从语言体系上讲,C#语言属于C语言家族,是对C语言和C++语言的发展。它沿用并且发展了C++的基本思想,又去除和限制了一些相对比较难的技术。例如限制了指针,在C#语言中使用指针只能在不安全代码中才能使用。
C#语言在C++基础上扩充和发展出来以后,更注重于实际开发应用,在思想上完全面向对象。限制了C++的一些底层的东西,又增加了一些新的功能,例如自动回收内存。但这些功能的扩充,导致了C#语言不可能像C++那样在底层控制上自由、灵活、效率高。但这种改进在软件开发效率上有很大的提高,同时。对于学习者入门的要求也降低了。
它们的主要区别体现在(当然还有其他区别,在此不一一列举):
1.继承
C#不允许多重继承(接口除外,接口可以多重继承),C++可以,因为C++有虚基类可以解决冲突问题,即classB: virtual public A, class C: virtual public A, class D:public B, public C,这样在D中只有A的一份拷贝,但C#没有,因此C#中Virtual不能 用于修饰类。
2.关于抽象类
C++中包含抽象方法的类是抽象类,不能被实例,而所谓的抽象方法也只是virutal XXX= 0;而并没有一个专用的关键字,C# 中有abstract关键字,可用于修饰方法和类,抽象类也是不能被实例,这和C++一样,抽象方法声明只是以一个分号结束, 并且在签名后没有大括号 ({}),基本上和C++一样,区别只在于它有一个专用的关键 字。
3.关于接口
C++中没有接口,作为替代品,可以将所有的方法都定义为virtual XXX = 0,C#中有Interface,并且还可以加访问控制的,但 奇怪的是既然是接口为什么会有private的?VS默认生成的接口是一定要手动加上public的,接口与abstract的区别是接口中 没有成员,只有方法,是根据对外表现定义的,abstract可以有成员和方法的实现,是根据一些类的共性定义出来的,是根 据一类对象的内在共性定义的。由于在C#中规定子类必须实现abstract方法,不然编译出错,所以很显然,普通类中不能包 含abstract方法。在C#中接口里面的方法前不能加修饰符,既不用也不能加public, abstract, virtual 之类的。
4.关于virtual
C++和C#中都有virtual,均是为了多态,C#中子类用override来重写,C++中还是用virtual。在C#中,对于接口中的方法, 子类实现时只需加public 即可,abstract和 virtual方法都是用override。
5.关于sealed
C#中引入sealed表示一定类不能再被继承,用来表明自己是最终版,当应用于方法或属性时,sealed修饰符必须始终与 override一起使用,当用于类时可以直接使 用。显然sealed不能修饰抽象类。
6.数组:声明 C#数组和声明 C++数组的语法不同。在 C#中,“[]”标记出现在数组类型的后面。bool 类型:bool 类型和其他类型(特别是int)之间没有转换。
当然这些只是不同点中的一部分,相信通过对C++和C#的比较学习,会更快地掌握C++。
- 比较C#与C++、Java的异同
- C++,C#的比较
- C# 与 C 、 C++ 、 D 、 Java 的性能比较(一)
- C# 与 C 、 C++ 、 D 、 Java 的性能比较(二)
- C# 与 C 、 C++ 、 D 、 Java 的性能比较(三)
- C++,C#与JAVA实现多态的比较
- [C#] C#与JAVA的一些语法比较
- c#与c等基础部分的比较
- C#与C++、Java之比较概览
- C#与C++、Java之比较概览
- C# 与 C 和 C++ 比较
- C#与C/C++ 性能比较
- C#与C++、Java之比较概览
- Python与c、Java、c#比较
- C#与Java的比较
- C#与C++的比较
- c#与c++的比较
- java与C#的比较
- JVM学习文档
- Oracle 样本模式 HR
- Android Volley完全解析(四),带你从源码的角度理解Volley
- UVA 1297 最长回文串【裸】
- 自己写的使用C# DOM里的XPATH
- C++与C#的比较
- pthread_barrier_init,pthread_barrier_wait简介
- 也谈layout_gravity和gravity的用法
- codeforces290 B.Fox And Jumping
- java的回调
- java字符串的各种编码转换
- 让lager的日志文件按日期滚动起来
- CentOS7.0 安装redmine2.6全记录,详细更新
- css基础教程