C++ VS C# 结构体和对象的细微区别

类与结构体在C++与C#中都是可以使用的,但是两者在两种语言中的区别却很大,今天在这里进行一下记录。

在C++中,类与结构体的唯一区别就是默认访问权限的区别。在struct中,默认的访问权限为public,而在类中,默认的访问权限为private。
举例一段代码,这样更容易理解:

class MyClass{//无显式的访问修饰符,默认为privateint Value;};MyStruct myStruct;myStruct.Value = 10;MyClass myClass;//因为Value为private,所以这个赋值语句出错myClass.Value = 10;

在C#中,默认权限不再是两者的区别,其默认访问权限均为private的。区别在于,struct在C#中是值类型,值类型在栈上分配内存,而class为引用类型,在托管堆上分配内存。

举例一段代码,更直观:

 //C#struct MyStruct{public int Value;};class MyClass{public int Value;};static void Main(string[] args){MyStruct myStruct1 = new MyStruct();MyStruct myStruct2 = myStruct1;myStruct1.Value = 10;myStruct2.Value = 20;Console.WriteLine("myStruct1.Value = {0}", myStruct1.Value);Console.WriteLine("myStruct2.Value = {0}", myStruct2.Value);MyClass myClass1 = new MyClass();MyClass myClass2 = myClass1;myClass1.Value = 10;myClass2.Value = 20;Console.WriteLine("myClass1.Value = {0}", myClass1.Value);Console.WriteLine("myClass2.Value = {0}", myClass2.Value);}

该段代码的输出结果如下:
myStruct1.Value = 10
myStruct2.Value = 20
myClass1.Value = 20
myClass2.Value = 20

从结果中可以看出,类的"=“就相当于指针赋值,MyClass myClass2 = myClass1语句完全可以认为是将myClass1的地址赋值给myClass2,所以对myClass2的任何更改都会反映到myClass1之中。而struct的”="操作,就是简单的赋值操作,也就是将myStruct1.Value复制给myStruct2.Value而已,对myStruct2的任何操作都不会影响到myStruct1。

struct和class的"=“的区别,在C++中根本不存在。无论是struct还是class,C++中的”="都是赋值操作,也就是和C#的struct一致。

本文参考来自:https://www.cnblogs.com/wodeyitian/archive/2011/02/18/2460251.html

C++ VS C# 结构体和对象的细微区别相关推荐

  1. 结构体内容引用自非结构体数组对象axes(handles.axes1)

    Matlab结构体内容引用自非结构体数组对象 matlab的gui报错axes(handles.axes1) 如何解决 起因 代码 matlab的gui报错axes(handles.axes1) 废话 ...

  2. STL 的 std::set 创建自定义结构体的对象,定义严格弱序的比较函数

    文章目录 正文 Ref 系列地址 简 述: 对于 STL 中 std::set 创建自定义结构体的对象,发现使用 "函数对象" 和 "定义普通函数 + decltype& ...

  3. JNI调用c++函数,该函数的参数是结构体(——对象的传递)

    第三方C++函数接口为 int api_get_logfile(Struct fileinfo tfile),参数是个结构体,且套了另一个结构体: struct fileinfo{  char *fu ...

  4. python结构体_Python对象初探

    欢迎关注微信公众号--Python与统计分析,一起学习,一起交流. 相信所有学过Python的人都听过这样一句话:Python中,一切皆对象.一个整数是一个对象,产生这个整数的类int也是一个对象.函 ...

  5. 类(class)和结构体(struct)的区别

    先了解一下什么叫类? 类(Class)是面向对象程序设计实现信息封装的基础.类是一种用户定义类型,也称类类型.每个类包含数据说明和一组操作数据或传递消息的函数.类的实例称为对象.类是面向对象程序设计中 ...

  6. 结构体和类使用的区别

    前段时间写推力叠加时遇到的一个问题,我当时最开始是用两个列表分别存储由推力和方向得到的速度.速度的持续时间,下标一一对应.后来觉得可以用结构体来存储速度和持续时间,这样就只需要一个列表管理就可以了,能 ...

  7. C语言结构体指针与结构体变量作形参的区别

    区别 结构体变量 结构体变量作为函数参数,传递的是结构体变量本身,是一种值传递 形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变 结构体指针 结构体指针作为函数参数,传递的是指向结构体变 ...

  8. Swift 结构体和类的最大区别

    2019独角兽企业重金招聘Python工程师标准>>> 结构体类型的赋值是值类型 类的赋值是引用类型 来自为知笔记(Wiz) 转载于:https://my.oschina.net/t ...

  9. 结构体内容引用自非结构体数组对象_类和对象

    类和对象知识点思维导图 面向对象编程的概念 在java中,万物皆对象. 面向对象是指以属性和行为的观点去分析现实生活中的事物. 面向对象编程是指先以面向对象的思想进行分析,然后使用面向对象的编程语言进 ...

最新文章

  1. 在Mac上利用pip3安装pyecharts模块
  2. c# 多线程排队队列实现的源码
  3. day 0314函数的进阶
  4. SQL 取字符串列表
  5. 蚂蚁变大象:浅谈常规网站是如何从小变大的(转)
  6. let const —— ES6基础总结(二)
  7. 互联网拥塞控制终极指南
  8. 理解SQL SERVER中的分区表(转)
  9. 格式化输出;while循环;运算符
  10. No.2小白的HTML+CSS心得篇
  11. 易宝典文章——玩转Office 365中的Exchange Online服务 之十一 怎样在Exchange Online中配置邮件传递限制...
  12. 计算机的mac被交换机绑定,华为交换机绑定IP与MAC地址 -电脑资料
  13. vivado下载失败并报 End of startup status:LOW
  14. Spring boot集成海康威视门禁设备
  15. Html控制舵机,舵机速度控制原理细解
  16. 从敏思博客的倒闭事件看历史重现...
  17. 为什么BAT公司宁愿花25K重新招人,也不愿花20K留住老员工?
  18. 手机java update_手机里的java菜单老是自动更新为什么啊
  19. Js实现中文排序,并根据拼音首字母分组
  20. isAssignableFrom方法的功能简介说明

热门文章

  1. C与CUDA混合编程的配置问题
  2. leetcode_two sum()
  3. [云炬python3玩转机器学习笔记] 3-5Numpy数组和矩阵的基本操作
  4. [MATLAB学习笔记]clf清空图窗1013(1)
  5. Python脚本-批量修改文件名
  6. 提高sql性能的方法
  7. SCOPE_IDENTITY 和 @@IDENTITY 的区别
  8. 数据库中什么是主键,什么是外键?
  9. c#操作数据库(二)dataAdapter篇
  10. go语言中的defer