结构体和类的区别,结构体和类有什么区别?
结构体和类的区别,结构体和类有什么区别?详细介绍
本文目录一览: 结构体和类有什么区别?
类是对事物的描述,结构体只是用来表示一个结构。
1、类是对一件事物的抽象,可以有自己的访问方式(如public),成员变量,成员函数,继承和被继承这样的关系。
2、结构体,只是用来表示一个结构的,它有成员变量,成员函数(c++后来加入的……)。但是没有访问方式和继承这样的关系,它只是用于表示一种数据结构。
结构体和类的区别
结构体和类都是面向对象编程中常见的数据类型,它们的主要区别在于以下几个方面:
1. 成员访问权限:在C++中,结构体的默认访问权限是 public,而类的默认访问权限是 private。这意味着,当定义一个类时,它的成员是不能被外界直接访问的,需要通过方法(成员函数)来访问;而定义一个结构体时,它的成员可以被外界直接访问。
2. 默认继承关系:在C++中,由于类的访问权限默认是 private,因此类对外界的接口由其公有的成员函数来提供,这使得类更适合作为可继承的接口。而结构体默认访问权限是 public,所以结构体更适合用于定义轻量级的数据类型。
3. 内存布局:在C++中,类的对象通常包含成员函数指针,因此类对象的大小可能不同于其成员变量的大小。而结构体对象只包含其成员变量,因此其大小就等于成员变量的大小。
总的来说,类通常用于定义对象,提供方法、行为等,适合封装复杂逻辑和数据结构;而结构体通常用于封装简单数据类型,方便在不同函数间传递。当然,也需要根据实际需求来选择使用哪种数据类型。
c#语言中,结构体和类的区别?
楼上说的很详细
结构和类有什么区别呢.
结构和类一样
都同等于一个自定义类
但是结构是值类型
如果你在结构中有一个int
a
你写上一句int
B
=
a的话
他们的值会是一样
但是不管你怎样改变其中的一个
另外一个也不受影响
因为这是值类型(基本数据类型)
B只是a的值的副本
如果是类的话
int
B
=
a
他们的值也会是一样
但是你只要改变了其中一个
另外一个也会改变
因为类是引用类型
B和a都指向同一个值的地址
而并不是a的一个副本
在使用中
类的功能比结构要大很多
构造函数的话
和类差不多
如果不写构造函数:
他们都默认会有一个无参的构造函数
但是如果带了有参的构造函数
:
类的话可以在重新写一个无参的
否则就不能使用无参构造函数创建实例
结构的话不需要在写无参的构造函数
至于怎么区分结构还是类
这很简单
结构在定义的时候
前面要加Struct
而类在定义的时候前面要加Class
【从定义上区分】
1)结构体是structure为关键字起手的定义,而类是class。
2)结构体的默认构造函数是无参的构造函数,但是如果你为一个结构体定义了带参的构造函数,你绝对不能再重复去写一遍那个无参的空构造函数;类相反——定义了一个带参的构造函数,绝对要再重复定义一次空构造函数,否则你无法调用空构造函数。
【从使用角度区分】
1)
Struct结构体是“复合类型”,其功能等同与基本的int,double的用法
,尽管struct也可以写方法,但是不赞成这样做。
因为struct的引入是为了解决“多类型”的问题
(比如一个学生记录包含id,name等不同基本类型的组合,单个int,string无法满足,所以才出现了struct)。类是组成面向对象编程的基础,功能远远大于结构。
2)Struct因为默认继承System.ValueType(可以这样理解),因此说,
一个结构赋值给另外一个结构的时候,相当于做了拷贝复制功能
(两者完全没有联系,假设A=B,那么B和A各自改变互不影响);但是class的话A=B,A和B共同引用同一个单元,A或者B有一方改变就影响了另外一方。
本质上class是封装的指针而已。
类和结构的区别
区别:
1.类型不同:结构是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
2.存储不同:结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。
3.作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
解释:
类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
扩展资料:
结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用。
两者在本质上都属于数据结构。封装着一组总体作为一个逻辑单位的数据和行为。 数据和行为是该类或结构的“成员”,它们包括各自的方法、属性和事件等。
与类不同的是,结构体用struct 修饰;结构体中的实例字段不能自定义默认值,而类可以,编译器会隐式的给出结构体和类的默认构造函数,但是结构体的默认构造不能显示给出,不然编译器会报错。
当类有自定义的构造函数时,默认构造会被隐藏,要想使用默认构造,必须显示给出;结构体的自定义构造函数必须初始化所有的实例字段和未初始化的属性,而类不是。
类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。
区别:
1.类型不同:结构是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
2.存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。
3.作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
4.关键字不同:在类中可以使用但是在结构中限制使用的关键字有:abstract、sealed、protected;StaTIc关键字可以用在类名前面用来声明静态类,但是不能用在struct前面,不存在静态结构。
5.初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
在C语言中,为了实现我想要的结构,可以自定义定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的成员,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。
在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函数。
扩展资料:
在计算机科学中,在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系称为结构。根据数据元素之间关系的不同特性,通常分为4类基本结构:线性结构、树形结构、集合、图状结构或网状结构。
类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。
一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
参考资料:百度百科——结构
参考资料:百度百科——类
类与结构是有区别的
虽然两者意思相近,但是结构不能被继承,类是可以继承的。
语法区别:结构体内成员的属性默认是 public 而 class 是默认为 private应用区别:结构体不能继承,派生,而 class 可以。
举例:
这是……一类。(类通常是放在一个泛指名词末端)
这东西的结构是……(可以看到结构是对特定事物的成分和构造做分析)
扩展资料:
结构方式
结构方式是总体中的分体结合构成总体的方式。主要有文字的结构方式、段落的结构方式和文章的结构方式。文字结构方式,就是文字组成的方式。
参考资料:百度百科:结构 百度百科_类和对象
1、类型不同:结构是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
2、存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。
3、作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
4、初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。
扩展资料:
类的特性:
1、封装性
将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。
2、继承性
继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。
3、多态性
同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
基本结构的构成:
在计算机科学中,根据数据元素之间关系的不同特性,通常分为4类基本结构。
集合
集合是指结构中的数据元素之间除了“同属一个集合”的关系外,别无其他关系。例如这些数据项的类型是相同的。
线性结构
线性结构是指结构中的数据元素之间存在一个对一个的关系。常用的线性结构有:线性表,栈,队列,双队列,数组,串。
树形结构
树形结构是指结构中的数据元素之间存在一个对多个的关系。在树形结构中,树根结点没有前驱结点,其余每个结点有且只有一个前驱结点。叶子结点没有后续结点,其余每个结点的后续节点数可以是一个也可以是多个。
经典数据结构中的各种树状图是一种典型的树形结构:一颗树可以简单的表示为根, 左子树, 右子树。 左子树和右子树又有自己的子树。
图状结构或网状结构
图状结构或网状结构是指结构中的数据元素之间存在多个对多个关系。网状结构(reticular formation)分为全连接网状和不完全连接网状两种形式。全连接网状中,每一个节点和网中其它节点均有链路连接。
不完全连接网中,两节点之间不一定有直接链路连接,它们之间的通信,依靠其它节点转接。这种网络的优点是节点间路径多,碰撞和阻塞可大大减少,局部的故障不会影响整个网络的正常工作,可靠性高;网络扩充和主机入网比较灵活、简单。
但这种网络关系复杂,建网不易,网络控制机制复杂。广域网中一般用不完全连接网状结构。
参考资料:百度百科-结构
参考资料:百度百科-类
别被弄晕了,不同语言类和结构的区别是不同的,c++中类与结构体唯一区别是类默认是private,结构体默认是public
1、存储类型:结构是值类型,存储在栈上。类是引用类型,存储在栈上和堆上,堆上存储真实数据,栈上存储存储地址,修改一个引用的值,另一个相同的引用的值就会发生改变。
2、继承性:类是可以继承的,它可以继承其他的类或者接口,也可以被继承,并且,类的许多特性是通过继承来展现的,要阻止类的继承,必须显示的声明sealed。结构没有继承:它不能继承另一个结构或者类,也不能被继承。也正因为如此,结构不能有抽象成员。虽然结构没有明确的用sealed声明,可是结构是隐式的。结构能够继承接口,方法和类继承接口是一样的。
3、初始化:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。
4、构造函数:类和结构都有自己默认的构造函数。在类中,一旦我们编写了带参数构造函数,默认构造函数就不存在了。当我们要调用不带参数的构造函数来初始化对象时,我们必须再自己编写一个不带参数的构造函数。但是在结构中,始终存在一个不带参数的默认构造函数,并且,这个构造函数是不可替代的,不能重写,也不能覆盖,在结构中,我们只能编写带参数的构造函数,不能编写不带参数的构造函数。
5、析构函数:类有析构函数,但是结构没有析构函数。
6、关键字:在类中可以使用但是在结构中限制使用的关键字有:abstract、sealed、protected;StaTIc关键字可以用在类名前面用来声明静态类,但是不能用在struct前面,不存在静态结构。
扩展资料
使用说明
结构存储在栈中,而栈有1个特点,就是空间较小,但是访问速度较快,堆空间较大,但是访问速度相对较慢。所以当我们描述1个轻量级对象的时候,可以将其定义为结构来提高效率。比如点,矩形,颜色,这些对象是轻量级的对象,因为描述他们,只需要少量的字段。当描述1个重量级对象的时候,我们知道类的对象是存储在堆空间中的,我们就将重量级对象定义为类。 他们都表示可以包含数据成员和函数成员的数据结构。
与类不同的是,结构是值类型并且不需要堆分配。结构类型的变量直接包含结构的数据,而类类型的变量包含对数据的引用(该变量称为对象)。 struct 类型适合表示如点、矩形和颜色这样的轻量对象。尽管可能将一个点表示为类,但结构在某些方案中更有效。在一些情况下,结构的成本较低。例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。所以结构适合表示1个轻量级对象。
参考资料百度百科-类
结构体和类的区别及面向对象的认识
区别
结构体是单独于某个具体对象的存在。是数据结构在代码中的实现。
结构体是为了某些算法或者实现特定功能而存在的类似接口的这种抽象存在。
类则是现实世界的实体在代码中的实现。
类是有自己的属性自己的方法。
共性
两者的作用都是封装。结构体也支持面向过程语言比如C。类却都是面向对象的封装。
口袋妖怪心金魂银完全神兽捕捉攻略
http://www.koudai8.com/newbbs/viewthread.php?tid=363835
希望对您有所帮助!~
在c语言中,结构体只是一个单纯的数据块,里面不能放方法。
当然c中没有类。
但是在c++中,结构体中可以放置方法函数,
这时类和结构体是等同的。
有点区别的是,结构体中默认所属是public,类中默认是private
两者可以交叉继承(class继承struct或者相反)
c#语言中,结构体和类的区别?
第一个问题:,“结构体”和“类”有啥区别?怎样辨别是结构体还是类!
结构体是一种值类型,而类是引用类型。(值类型、引用类型是根据数据存储的角度来分的)
就是值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
第二个问题:两者里面是不是都有构造函数?为什么结构体用得比较少?
构造函数是为了初始化类的字段而存在的,而结构体并不需要初始化就能使用,因此,结构体中并不存在构造函数。
不能以使用多少来衡量,只是看相应问题使用最适合的方法罢了。结构体的定义是:有些数据既是相互关联的,又共同描述一个完整事物,如:一个学生的整体信息,学号、姓名、性别等。而类则使用在需要比较有层次的数据上面。
c#中结构与类的区
目录
类与结构的实例比较
类与结构的差别
如何选择结构还是类
一.类与结构的示例比较:
结构示例:
public struct Person
{
string Name;
int height;
int weight
public bool overWeight()
{
//implement something
}
}
类示例:
public class TestTime
{
int hours;
int minutes;
int seconds;
public void passtime()
{
//implementation of behavior
}
}
调用过程:
public class Test
{
public static ovid Main
{
Person Myperson=new Person //声明结构
TestTime Mytime=New TestTime //声明类
}
}
从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是 struct 还是 class 的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。那么类和结构的具体区别是什么呢?
二 .类与结构的差别
1. 值类型与引用类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
因为结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用
注:
1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object
2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段将保持未赋值状态,且对象不可用
2.继承性
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .
类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承
注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样
例如:结构实现接口
interface IImage
{
void Paint();
}
struct Picture : IImage
{
public void Paint()
{
// painting code goes here
}
private int x, y, z; // other struct members
}
3.内部结构:
结构:
没有默认的构造函数,但是可以添加构造函数
没有析构函数
没有 abstract 和 sealed(因为不能继承)
不能有protected 修饰符
可以不使用new 初始化
在结构中初始化实例字段是错误的
类:
有默认的构造函数
有析构函数
可以使用 abstract 和 sealed
有protected 修饰符
必须使用new 初始化
三.如何选择结构还是类
讨论了结构与类的相同之处和差别之后,下面讨论如何选择使用结构还是类:
1. 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些
2. 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3. 在表现抽象和多级别的对象层次时,类是最好的选择
4. 大多数情况下该类型只是一些数据时,结构时最佳的选择
看到你问的问题就知道你是初学者。
首选结构体是一个值类型,而类是一个引用类型。
从你的后几句的补充上来说,你还没有型清楚什么是引用类型,什么是值类型。字与传值引用,传址引用是两码事,不要弄一块了!
所以的值类型与引用类型上,我这样给你说一下,看你是否能明白。
值类型的内存单元里是值,而引用类型单元里边是地址,地址指向了值。
比如int是值类型,int
s
=5;
s这个内存单元中就是5,不是地址指针。
而类则是一种引用类型!类中的并不是实际的值,而是一些指针指向了真正的值。
所以值类型就是反映的直接的数据。如:
struct
M(int,int)
这个结构就是直接的值类型,它在内存中的表现是,除了结果体说明,就占两个int空间,用第一个空间里的数做第一个数值,第二个空间的数就是第一个数值。这就是结构体,也就是值类型。
值类型与引用类型说是类型。
传值引用,与址引用说的是引用方式。我给你的参数是一个值,你就按这个类计算去。如果我给的是地址,你计算时直接用的是地址。
在C#中没有传址,而是直接使用的ref参数与out参数将对象直接传入的。
传址引用与传值引用是两种不同的引用方式,与类型没有半毛钱的关系。
static是静态,实际上是开辟数据公用区,也就是说,如果你见到static,那么所有的都会引用同一地址的数据。而这个数据就是所谓的数据公共区。它和引用方式也没有半毛钱的关系。
几个概念混着来,新手新的太实在了!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
首先一点,我不知道你从何处得来的信息,一个类加上static就是传址,不加就是传值,在C#中没有这样概念。
其次一点,我认为我所说的例子只是能让你暂时理解,但例子并不是真正的贴切。
第三,如果你真能理解,那么你以上的全部问题不是问题!说我没有回答问题,这话说得。。。。
第四,正如五楼所说,值类型是在栈中,而引用类型是堆中,但类的值是在堆栈中,也就是类的值未必全部都是堆中。
如果真的再去给你解释堆栈你未必会懂,你还以为是汇编中的栈啊?问题是汇编中有堆这个概念吗?而且对于堆和栈只是一种结构,是.net运行的基础,并不属于C#。我可以告诉你,两者概念是相同的,但使用方式与所存的内容全部两码事。
第五,如果你真的认为我没有回答问题,你可以只当我发广告,但以后绝不会借你的地儿发广告。
最后,其实个人认为你完全没有必要了解他们在内存中是如何存储的。只有在使用或是做一些IL时才会对这些东西弄的很清楚。而IL却是一种中间语言,学其中一门的C#完全没有必要懂的。不是懂汇编么--那么就是牛人了,IL也算是一种汇编,自己去看看吧!
结构体里没有构造函数,构造函数是用来实力化类的对象的。
类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性
关键字不同
1,结构是实值类型(Value Types),而类则是引用类型(Reference Types)。
2,结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。
3,所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。
4,结构成员不能被声明位Protected,而类成员可以。
5,结构变量声明不能指定初始值、使用New关键字货对数组进行初始化,但是类变量声明可以。
6,结构不能声明默认的构造函数,也就是不拥有参数的非共享构造函数,但是类则无此限制。
7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。
8,结构不允许声明析构函数(Destructor),类则无此限制。
9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同时进行变量初始化。
10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类则可以继续自ValueType以外的任何类。
11,结构是无法被继承的,类则可以。
12,结构永远不会终止,因此CLR不会在任何结构上调用Finalize方法。类则是由内存回收进程加以终止,当内存回收进程检测到没有任何作用的类时,它就会调用类的Finalize方法。
13,结构不需要构造函数,类则需要构造函数。
14,结构只能在一种情况下使用非共享构造函数,那就是非共享构造函数会接受参数。但是类则无此限制,它可以使用带参数或不带参数的非共享构造函数。
14,每一个结构都具有无参数的隐含公共构造函数,此构造函数会将结构的所有成员初始化为其默认值。不需要重新定义这个行为。
在“实例和变量”层面上,由于结构是数值类型的,因此每一个结构变量会永远的绑定到结构实例上。然而类是引用类型的,而且对象变量可引用不同的类实例,在此方面的区别,会对使用将结构和类造成如下的影响:
15,结构变量会隐式的使用结构的无参数构造函数来初始化成员,这就意味语句 Struct S = new Struct()。
16,当您将一个结构变量赋值给另一个,或者将结构实例传递到程序变量时,所有变量成员的值会复制到新的结构中。当您将一个对象变量赋值给另一个,或者将对象变量传递给程序时,则只是复制指针。
17,您可以将Null值赋值给结构变量,但是该实例会一直与该变量保持关联。虽然变量成员会因此赋值而重新初始化,但是您还是可以调用变量的方法并访问其数据成员。相反的,如果您将对象变量设定为Null,您就会中断它与任何类型实例的关联,而且除非您再将另一个实例赋值给它,否则无法通过变量访问任何成员。
18,您可以在不同时间将不同的类的实例赋值给同一个对象变量,而且在同一时间可有好几个对象变量引用相同的类实例,如果您对类成员值做了改变,则其他指向相同实例的对象变量也会发生改变。然而,结构成员则会封装在他们自己的实例中,变更结构成员值并不会对其他任何结构变量的成员造成影响,甚至也不会影响相同结构声明的其他实例。
19,两个结构必须以成员对成员的比较方式来执行相等比较。两个对象变量可以使用Equals方法来加以比较。Equals会判断两个变量是否指向相同的实例。
Swift中类(class)和结构体(struct)区别
1.内存管理不一样,类引用类型,浅拷贝,分配在堆上。结构体是值类型,深拷贝,分配在栈上。
2.类,有析构函数。结构体不能有析构函数。
3.结构体构造函数会自动生成带参数的构造器。类不会对有初始化赋值生成带参数的构造器。
4.类有继承特性,结构体没有继承特性。结构体无继承特性,则无法对成员属性、成员方法、类属性、类方法进行重载。结构体的函数操作符需要static,不能使用class。
5.类中的每一个成员变量都必须被初始化,否则编译器会报错。而结构体不需要,编译器会自动帮我们生成init函数,给变量赋一个默认值。
6.类中可以有单例,结构体不能有
8.混合开发时,oc中不能调用swift中的结构体
9.方法派发:
? 静态派发:编译器讲函数地址直接编码在汇编中,调用的时候根据地址直接跳转到实现,编译器可以进行内联等优化,Struct都是静态派发。
?动态派发:运行时查找函数表,找到后再跳转到实现,动态派发仅仅多一个查表环节并不是他慢的原因,真正的原因是它阻止了编译器可以进行的内联等优化手段
10.struct在func里面需要修改property的时候需要加上mutating关键字,而class就不用。
1.操作符函数
2.范型
3.协议采纳
4.观察器
1、 堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些。
2、 结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。
3、 在表现抽象和多级别的对象层次时,类是最好的选择。
4、 大多数情况下该类型只是一些数据时,结构时最佳的选择。
6、结构体的主要目的是为了封装一些相关的简单数据值。
7、当你在赋予或者传递结构实例时,有理由需要封装的数据值被拷贝而不是引用。
8、任何存储在结构体中的属性是值类型,也将被拷贝而不是被引用。
9、结构体不需要从一个已存在类型继承属性或者行为。
c结构体,c++结构体 和 c++类的区别
C的结构体中不能指定成员的访问属性,只能是public,C++里可以指定为private,C++中默认的访问属性是public,类在C++中,完全取代了结构体,因为结构体不能实现信息隐蔽,没有继承等,类的成员默认访问方式是private。
C结构体
C是面向过程的编程语言。在C语言中,结构体是用作一种数据聚合方式,将一组关联紧密的数据组成统一的数据进行操作。其功能是最基本的,在C++结构体和C++类中同样包含该功能。
C++结构体
C++是面向对象的编程语言。结构体的表现形式,使用方法与C语言的结构体一致。
区别:
C++结构体是面向对象的,可以在其中定义函数。
C++的结构体存在访问权限(默认Public)。可以通过private方法修饰内部成员变量是否可以被修改。
C++类
C++类是面向对象封装的基础,功能和C++结构体类似,同样可以定义函数。
区别:
C++类的默认访问权限是Private。
类与结构体的区别
最大的区别就是,
类是引用类型,结构体是值类型,
类可以继承,结构不行,
语法区别:
结构体内成员的属性默认是 public 而 class 是默认为 private
应用区别:
结构体不能继承,派生,而 class 可以
结构体的成员只限于原始数据类型的变量,类则可以含有方法和属性,并且有多态特性,不可同日而语
c++?区别很小
貌似就是结构体成员默认public,类成员默认private?
区别相当小,基本可以无视...
结构没有无参构造函数
结构不能被继承
结构是值类型,而类是引用类型
结构在数据参数方面效率更高,简单数组的应用中成本很低
类在方法运算方面更有优势,在抽象多级别时最佳选择