C语言的structure和类有什么区别?
一、C语言的structure和类的区别
1、声明时的关键字不同,结构是 struct ,而类是 class
2、结构是值类型,存储在栈中,类是引用类型,存储在托管堆中,结构在声明的时候就已经为其分配栈上的内存了,而类需要用new为其分配堆上的内存。
3、结构是隐式密封的,不能使用 sealed (只能在当前项目中访问,不能继承只能实例化) 和 abstract (只能在当前项目中访问,不能实例化只能继承) 修饰符,结构体不能被继承,所以在调用结构方法时不需要查找 vtable 虚函数继承表,类可以被继承。
4、结构中的实例字段只能声明不能赋值,而类没有限制。结构只声明没有用 new 进行初始化时,可以给它的实例字段直接赋值,而类不行。
5、结构没有析构函数,结构中的方法不能用 virtual 和 abstract 修饰符,但是可以用 override 修饰,用来重写父类的方法。
6、结构不能显示给出默认构造函数(无参构造函数),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义的构造函数时,默认构造会被隐藏,想要调用默认构造,必须显示给出默认构造。
7、结构可以使用属性,但是属性和构造函数不能同时存在。
8、结构的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制。
延伸阅读:
二、结构的使用场景
1、结构是值类型在栈中,栈的存取速度比堆快,但是容量小,适合轻量级的对象,比如点、矩形、颜色;
2、如果需要描述少量字段,不需要继承,就用结构;
3、在变量传值的时候,希望传递对象的是拷贝,而不是对象的引用地址,这个时候就可以使用结构。

相关推荐HOT
更多>>
为什么Java是解释型语言而Python不是?
一、Java是解释型语言而Python不是的原因Java和Python都是非常流行的编程语言,但它们的编译方式不同。Java是一种解释型语言,而Python则是一种...详情>>
2023-10-19 22:17:12
axios和ajax区别?
一、axios和ajax区别axios是通过promise实现对ajax技术的一种封装,就像jQuery实现ajax封装一样。简单来说ajax技术实现了网页的局部数据刷新,a...详情>>
2023-10-19 19:35:00
jndi和jdbc区别?
一、jndi和jdbc区别jdbcJavaDatabaseConnectivity(JDBC)是一个标准的JavaAPI,它由一组类和接口组成,Java应用程序开发人员使用它来访问数据库...详情>>
2023-10-19 16:29:05
Java和HTML有什么区别和联系?
一、Java和HTML的区别和联系区别Java是一门编程语言,一直在不断的发展更新目前JDK14,对于处于信息高速发达的今天,Java技术已经无处不在、各...详情>>
2023-10-19 14:41:28