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

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

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


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

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

6.总结一下,分别什么时候用?
(1)结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢.所以当我们描述1个轻量级对象的时候,可以将其定义为结构来提高效率.比如点,矩形,颜色,这些对象是轻量级的对象,因为描述他们,只需要少量的字段。当描述1个重量级对象的时候,我们知道类的对象是存储在堆空间中的,我们就将重量级对象定义为类。虽然它们都可以包含数据成员和函数成员的数据结构,不过结构体与类不同的是,结构体是值类型并且不需要堆分配,结构体的变量直接包含结构的数据,而类的变量包含对数据的引用。
(2)我们在变量传值的时候,我就是希望传递对象的拷贝,而不是对象的引用地址,那么这个时候也可以使用结构体了。
(3)我看一些项目里使用结构体的地方,一般都是字段纯数量或者是纯字符串的地方,所以某个对象纯数据类型,没有复杂的方法、逻辑、运算的可以考虑使用结构体。这个是目前使用结构体的主要原因,还有一个是结构体在编辑器(比如Unity)上显示会更方便。
边栏推荐
- Comprehensively design an oppe homepage -- layout and initialization
- FTP protocol
- Bugku login2
- Octree establishes map and realizes path planning and navigation
- 我的sql没问题为什么还是这么慢|MySQL加锁规则
- Development and implementation of campus epidemic prevention and control management system based on SSM
- 博途PLC顺序开关机功能块(SCL)
- C语言重点知识总结
- Application of workflow engine in vivo marketing automation
- Clojure operation principle bytecode generation
猜你喜欢

Technology vane | interpretation of cloud native technology architecture maturity model

RE9: read the paper deal inductive link prediction for nodes having only attribute information

Pandora IOT development board learning (RT thread) - Experiment 17 esp8266 experiment (learning notes)

Bugku login2

测试用例千万不能随便,记录由一个测试用例异常引起的思考

综合设计一个OPPE主页--明星机型的设计

2022 latest Tibet Construction scaffolder (construction special operation) simulation exam questions and answers

Re8: reading papers Hier spcnet: a legal stat hierarchy based heterogeneous network for computing legal case

Pat grade a 1045 favorite color stripe

Internet Protocol
随机推荐
Comprehensively design an oppe homepage -- the design of the top and head
Understanding weight sharing in convolutional neural networks
Question collection come and ask nllb authors! (Zhiyuan live issue 24)
量化交易之数字货币篇 - 通过时间戳与方向来合并逐笔成交数据(大单合并)
Pat grade a 1046 shortest distance
guetzli简单使用
PAT甲级 1047 Student List for Course
First knowledge of OpenGL (4) link shader
Clojure 运行原理之字节码生成篇
综合设计一个OPPE主页--明星机型的设计
Bugku login1
“核弹级” Log4j 漏洞仍普遍存在,并造成持续影响
Taishan Office Technology Lecture: the zoom ratio of word is slightly different from the display
Clojure 运行原理之编译器剖析
剑指offer专项突击版第11天
Implementation of SAP ABAP daemon
PAT甲级 1045 Favorite Color Stripe
2022牛客暑期多校训练营1(ACDGIJ)
Summary of key knowledge of C language
综合设计一个OPPE主页--顶部,头部的设计