浅析C#与C++相关概念的比较

 更新时间:2020年4月25日 17:45  点击:1785

1、在C#中,class的变量为引用类型,在C++中class的变量为值类型,如myclass mc,在C++中,mc是值类型,成员存储在程序的栈区,在C#中,mc是引用类型,指向堆中的成员。

2、switch语句,C#中case后面可根字符串,如case “abc“,但在C++中却不行,C++中case后面只跟数字,字符,和枚举。

3、在C#中没有C++中的私有继承和保护继承,只有公有继承。

4、C#中可以通过关键字sealed把一个类声明为密封类,即不能被作为父类被继承出派出类,在C++中可通过把构造函数声明为private,让其不能被作为父类被继承出派出类,且同时不能实例化,但可通过类的静态函数调用构造函数来产生实例。

5、C#支持用户自定义类型转换,可通过关键字implicit定义隐式转换,可通过关键字explicit定义显式转换。在C++中,可通过重载 = 操作符来达到隐式转换的目的。

6、在C#中,运算符重载则一定要把运算符重载函数定义为类的成员,且必须用static和public关键字修饰,且对于一元运算符重载,需要一个参数,对于二元运算符重载则需要两个参数。在C++中,运算符重载,有一个默认的隐含参数this,则一元运算符重载无需参数,二元只需一个参数。而且C#中不能重载 = 号运算符。

7、C#的catch语句有一个不带任何参数的一般catch语句,它相当于C++中的catch(...)。

8、C#中用关键字abstract来声明一个类为抽象类,抽象类不能实例化。在C++中通过声明一个纯虚函数来使一个类变成抽象类,同样不能实例化。

9、对于结构类型,即用关键字struct定义的数据结构,在C++中它与class的用法和功能相近,只是用class定义默认成员的访问权限是私有的,而stract默认成员的访问权限是公有的。而C#中class的变量是引用类型,而struct定义的变量则是值类型,成员的访问权限与class一样。注意,C#中结构不允许有析构函数。

10、对于结构类型,预定义的无参数构造函数对每个结构都存在,不能删除或重定义它,可以重载构造函数,但必须带有参数。

11、在C#中数组是对象,继承于System.Array,拥有一定的操作方法,并且数据是引用类型,引用在栈或堆上,而数组对象本身则在堆中。C++中数组只是数据或类的对象的一个集合,数组本身并不是对象,但数组中的元素可以是对象,数组本身可在栈中或在堆中。C#并不支持动态数组,而C++则可以通过new动态分配内存,实现动态数组。

12、在C#中存在一种叫接口的数据类型,它是一组函数的声明并没有实现函数的引用类型,不能实例化,只有类才能实现接口,实现接口必须实现接口中的所有声明的函数。在C++中虽然没有这种默认数据类型,但是在C++中可以自己创建一个接口类型,就是把里面的函数全部声明纯虚函数,并不含数据成员,来实现相同的功能。

13、C#中一个类可以实现多个接口,各个接口必须以‘,'分隔,如果还有基类,则基类必须写在最前面,如果多个接口中有多个相同的签名和返回类型的接口成员,类则可以实现单个成员来满足所有包含重复成员的接口。这是C#中的默认方式,也可以用点运算符来指定实现的成员所属的接口。这与C++中的多继承而产生的歧义问题相似,它并不提供这种默认的机制,在C++中则是相对自由的,你可以通过域运算符来指明你所调用的是哪个基类的成员,或是你实现的是哪个基类的成员。若你只想你的派生类对同一签名的函数或成员只有一份实现,则可以使用虚继承的方法来实现。

14、在C#中类只能单继承不能实现多继承,而对于接口,接口可以实现单继承和多继承,而实现它的类必须对接口继承体系中所有的接口成员提供实现。

15、在C#中存在叫装箱和拆箱的转换,为什么会有这两种转换,是因为C#中的变量数据有的保存在堆中(引用类型),有的则保存在栈中(值类型),当要把值类型赋给引用类型时,就要把值类型装箱,反之则需要拆箱。而且拆箱是显式转换。装箱之后,引用类型在堆中保存的值是原值类型的一个副本。在C++中则不存在这样的问题,因为变量数据默认是保存在栈中的,若要保存在堆中则需要用到指针,要赋值则需要p->data = data或(*p).data = data。也可以通过重载‘='运算符来达到隐式转换的效果。

16、在C#的泛型编程中,可用关键字where来对类型参数进行约束,例如class myclass<T1, T2, T3> where T2:cls2 where T3:In3。则只有cls2类型或其派生类型才能作为T2的实参,而只有In3接口类型才能作为T3的实参。这与C++中泛型编程中的模板特化和模板偏特化相似,在C++中可以用这样的形式实现相似的功能,class myclass<T1, cls, In3>。

[!--infotagslink--]

相关文章

  • C#实现简单的登录界面

    我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
  • 浅谈C# 字段和属性

    这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
  • C++ STL标准库std::vector的使用详解

    vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#实现简单的Http请求实例

    这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
  • C#中new的几种用法详解

    本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
  • 使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)

    这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • C++中取余运算的实现

    这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C#和JavaScript实现交互的方法

    最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 轻松学习C#的基础入门

    轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • c#中(&&,||)与(&,|)的区别详解

    这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#绘制曲线图的方法

    这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25