• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 浅析C#与C++相关概念的比较

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#和c++有什么区别,c#和c++的区别,c#调用c++ dll,c#调用c++dll实例,c#转c++等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 11和C++98相比有哪些新特性
  • C++中继承与组合的区别详细解析
  • 浅析C#与C++相关概念的比较

相关文章

  • 2017-05-28C/C++静态类和this指针详解及实例代码
  • 2017-05-28探究在C++程序并发时保护共享数据的问题
  • 2017-05-28C语言获得电脑的IP地址的小例子
  • 2017-05-28可读可执行的C语言简历源文件
  • 2017-05-28C++ 中重载和运算符重载加号实现矩阵相加实例代码
  • 2017-05-28C++实现简单的HTTP服务器
  • 2017-05-28纯C语言:递归二进制转十进制源码分享
  • 2017-05-28Eclipse对printf()不能输出到控制台的快速解决方法
  • 2017-05-28c++ STL set_difference set_intersection set_union 操作
  • 2017-05-28C++实现邮件群发的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言一维数组初步学习笔记
    • C++的静态联编和动态联编详解
    • C++遍历文件夹下文件的方法
    • Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解
    • c++友元函数与友元类的深入解析
    • 详解约瑟夫环问题及其相关的C语言算法实现
    • 关于STL中的map容器的一些总结
    • 函数指针与指针函数的学习总结
    • 浅谈C语言函数调用参数压栈的相关问题
    • c++拷贝构造函数防篡改示例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有