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++。

0 0