当前位置:网站首页>结构体和类使用的区别
结构体和类使用的区别
2022-07-26 16:10:00 【汤圆一碗】
前段时间写推力叠加时遇到的一个问题,我当时最开始是用两个列表分别存储由推力和方向得到的速度、速度的持续时间,下标一一对应。后来觉得可以用结构体来存储速度和持续时间,这样就只需要一个列表管理就可以了,能少用一次遍历,同时更好的面向对象吧。然后用结构体改的时候却发现结构体里的字段不能直接用来加等减等运算,因为结构体里的字段是放在栈里的,为值类型。后来就把结构体改成类解决了这个问题,因为类的存储是在堆里的,为引用类型。所以想总结下两者的区别:
1.结构体字段不能初始化,类的字段可以初始化

2.结构体是值类型,存储在栈;类是引用类型,存储在堆

3.结构体不能再写无参的构造函数,类可以;不过都可以写带参的构造函数


4.结构体的构造函数中必须为所有字段赋值,类可以不必全部赋值

5.结构体创建对象的方式有些不同

6.总结一下,分别什么时候用?
(1)结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构来提高效率.比如点,矩形,颜色,这些对象是轻量级的对象,因为描述他们,只需要少量的字段。当描述1个重量级对象的时候,我们知道类的对象是存储在堆空间中的,我们就将重量级对象定义为类。虽然它们都可以包含数据成员和函数成员的数据结构,不过结构体与类不同的是,结构体是值类型并且不需要堆分配,结构体的变量直接包含结构的数据,而类的变量包含对数据的引用。
(2)我们在变量传值的时候,我就是希望传递对象的拷贝,而不是对象的引用地址,那么这个时候也可以使用结构体了。
(3)我看一些项目里使用结构体的地方,一般都是字段纯数量或者是纯字符串的地方,所以某个对象纯数据类型,没有复杂的方法、逻辑、运算的可以考虑使用结构体。这个是目前使用结构体的主要原因,还有一个是结构体在编辑器(比如Unity)上显示会更方便。
边栏推荐
- Clojure Web Development -- ring user guide
- Pat class a 1047 student list for course
- How to test the circle of friends (mind map)
- TKE集群节点max-pod是如何配置的
- 绘制漂亮的中学操场轮廓,生成带经纬度数据
- First knowledge of OpenGL (4) link shader
- [e-mr] error recovery record of namenode
- Re7:读论文 FLA/MLAC Learning to Predict Charges for Criminal Cases with Legal Basis
- Pat grade a 1045 favorite color stripe
- 使用 ClojureScript 开发浏览器插件的过程与收获
猜你喜欢

Botu PLC Sequential switch function block (SCL)

DTS is equipped with a new self-developed kernel, which breaks through the key technology of the three center architecture of the two places Tencent cloud database

Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information

【ARM学习(9) arm 编译器了解学习(armcc/armclang)】

Google Earth Engine——MERRA-2 M2T1NXSLV:1980-至今全球压力、温度、风等数据集

该怎么写单元测试呢

2022年最新北京建筑安全员模拟题库及答案

综合设计一个OPPE主页--导航栏的设计

Linux安装mysql8.0.29详细教程

PAT甲级 1050 String Subtraction
随机推荐
A firefox/chrome plug-in that visualizes browser history
终于有人把红蓝对抗讲明白了
PAT甲级 1050 String Subtraction
Draw a beautiful outline of the middle school playground and generate longitude and latitude data
Development daily summary (11): file upload function improvement: Chinese character detection and text content processing
Pat grade a 1049 counting ones
【物理模拟】最简单的shape matching的原理与实践
Mapwithstate of spark streaming state flow
TKE集群节点max-pod是如何配置的
Octree establishes map and realizes path planning and navigation
Specific practice cases of "card note taking method" in Siyuan
The difference between oncreate and onrestoreinstancestate recovery data of activity
FTP协议
Sword finger offer special assault edition day 11
Technology vane | interpretation of cloud native technology architecture maturity model
该怎么写单元测试呢
【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)
Is it safe for Guoyuan futures to open an account online? What is the account opening process?
Question collection come and ask nllb authors! (Zhiyuan live issue 24)
Bugku login2