原创文章,欢迎转载。转载请注明:关东升的博客
类和结构体非常相似,很多情况下没有区别。如果你是设计人员在进行系统设计时候,是将某种类型设计成为类还是结构体?
类和结构体异同:
类和结构体都有如下功能:
- 定义存储属性
- 定义方法
- 定义下标
- 定义构造函数
- 定义扩展
- 实现协议
只有类才有的功能:
- 能够继承另外一个类
- 能够核对运行期对象的类型
- 析构对象释放资源
- 引用计数允许一个实例有多个引用
选择的原则:
结构体是值类型,每一个实例没有独一无二的标识,下面两个数组实例本质上没有区别,他们可以互相替换。
var studentList1: [String] = ["张三","李四","王五"] var studentList2: [String] = ["张三","李四","王五"]
但是我们提到类时候,它是引用类型,每个实例都有独一无二的标识。我们看看下面员工Employee类代码:
class Employee { var no = 0 var name = "" var job = "" var salary = 0.0 } var emp1 = Employee() emp1.no = 100 emp1.name = "Tom" emp1.job = "SALES" emp1.salary = 9000 var emp2 = Employee() emp2.no = 100 emp2.name = "Tom" emp2.job = "SALES" emp2.salary = 9000
emp1和emp2两个员工实例即便内容完全相同,但是这不能说明他们就是同一个员工,只是相似而已。每一个员工实例的背后都有独一无二的标识。
我们再来看看部门Department结构体。
struct Department { var no: Int = 0 var name: String = "" } var dept1 = Department() dept1.no = 20 dept1.name = "Research" var dept2 = Department() dept2.no = 20 dept2.name = "Research"
Department为什么被设计成为结构体而不是类呢,那要看我们对于两个不同部门的理解是什么,如果具有相同的部门编号(no)和部门名称(name),我们就认为他们是两个相同的部门,那么就可以把Department定义为结构体,这一点与员工Employee不同。
相关推荐
【C语言学习——结构体】 在C语言中,结构体是一种复合数据类型,它允许我们将不同类型的数据组合到一个单一的实体中,便于管理和操作。结构体的概念是C语言中非常重要的一个部分,它解决了在单一变量中存储多个...
C语言笔记——结构体 结构体是C语言中的一种复杂数据类型,用于存储多个类型不同的数据。结构体的概念是为了解决数组的局限性,能够存储多个类型不同的数据。 结构体的定义形式为:struct 结构体名 {类型 成员变量...
在Swift编程语言中,类(Class)和结构体(Structure)是两种主要的数据类型,用于组织和封装数据以及相关的操作。它们都是复合类型,可以包含属性(Properties)、方法(Methods)、下标(Subscripts)以及初始化器...
在 Swift 编程语言中,类(Class)和结构体(Structure)是两种用于创建自定义数据类型的核心构造。尽管它们在功能上有许多相似之处,但它们之间也存在一些关键的区别,这些区别影响着开发者在不同场景下的选择。...
在选择使用类还是结构体时,应考虑以下几个因素: - 如果你需要的是一个拥有复杂生命周期的对象,或者需要继承和多态,那么应该选择类。 - 如果数据的复制行为很重要,或者希望避免引用带来的问题,那么结构体可能是...
"再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类.txt"很可能包含了详细的文章内容,分析了这些因素对类和结构体性能的影响。"TryPointerCall2005"和"TryPointerCall2010"可能是用于测试和比较类...
[源代码]C#类与结构体究竟谁快——各种函数调用模式速度评测 详见—— http://blog.csdn.net/zyl910/article/details/6788417 C#类与结构体究竟谁快——各种函数调用模式速度评测
这篇快速学习笔记将带你深入理解Swift的基础概念,包括类的继承、扩展和泛型、类与结构体、协议、数据结构和控制流以及自动引用计数(ARC)。 首先,我们来看“SwiftStudyPlayground类的继承.playground”。在Swift...
Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了...通过本学习笔记的内容,我们可以对Go语言有一个全面而系统的认识,为深入学习和应用Go语言打下坚实的基础。
从Apple官方的“Swift Playgrounds”应用到各种在线教程和书籍,如《Swift编程语言》(The Swift Programming Language)官方指南,都提供了详细的学习路径。通过这些资源,你可以逐步了解并掌握变量与常量、控制流...
本学习笔记将深入探讨Swift的基础知识,帮助初学者快速掌握这一强大的工具。 一、Swift简介 Swift是由Apple在2014年WWDC(全球开发者大会)上推出的,旨在提高开发效率和代码安全。它吸收了Objective-C的优点,同时...
根据提供的文档内容,我们可以了解到这是一份关于逆向工程学习的中篇教程,主要以IDA(Interactive Disassembler)工具为焦点,覆盖了从基础的Windbg安装配置到高级的驱动逆向分析和利用技术。 首先,文档开篇介绍...
这篇学习笔记主要涵盖了Swift的基础知识和关键特性,旨在帮助初学者理解并掌握这种现代、强大且易读的语言。 一、Swift语言基础 Swift的语法简洁明了,易于理解。它引入了类型推断,使得编写代码时可以减少冗余的...
[测试程序exe]C#类与结构体究竟谁快——各种函数调用模式速度评测 详见—— http://blog.csdn.net/zyl910/article/details/6788417 C#类与结构体究竟谁快——各种函数调用模式速度评测
在C语言的世界中,结构体与函数是构建程序架构的两大基石。结构体(struct)为我们提供了组织和存储不同类型数据的能力,而函数(function)则允许我们将重复出现的代码逻辑封装起来,达到简化代码和提高可复用性的...
### C语言结构体学习笔记 #### 一、结构体的基础概念与定义 ##### 1.1 结构体的自述 - **结构体定义**:结构体(struct)是C语言中的一种复合数据类型,用于组织不同类型的数据作为一个整体,以便更好地管理和操作...
MATLAB 结构体应用详解 MATLAB 中的结构体是一种复杂数据类型,用于存储非uniform 的数据。结构体由字段和对应的值组成,每个字段可以是不同的数据类型。MATLAB 提供了两种定义结构的方式:直接应用和使用 struct ...
大家一起学Golang——结构体、方法 结构体类型 空结构体 结构体标签 匿名字段 方法 重写 结构体类型 结构体类型通过一系列的且唯一的字段来声明。在go中数组切片只能存储同一类型的数据,但结构体用户可以自定义将...
### Swift 结构体教程 #### 一、Swift 结构体简介 Swift 结构体是一种非常重要的数据类型,它提供了一种灵活的方式来组织相关的值。与类不同,结构体是值类型,这意味着每次传递或返回一个结构体时,实际上都是在...
在 Swift 中,选择使用类还是结构体取决于需求。如果需要的是值类型的行为,如基本数据类型的复制和比较,那么结构体是更好的选择。如果需要继承、类型转换或引用计数等特性,那么应该使用类。合理地使用这两种类型...