返回顶部

C++中class和struct区别

1、存储不同

结构体使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。  

  栈的空间相对较小.但是存储在栈中的数据访问效率相对较高。

  堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低

结构体使用完之后就自动解除内存分配,类实例有垃圾回收机制来保证内存的回收处理。

 

2、类型不同

结构体是一种值类型,而类是引用类型。

值类型用于存储数据的值,引用类型用于存储对实际数据的引用。

所以结构体就是当成值来使用的,类则通过引用来对实际数据操作

 

3、默认的访问权限不同

struct默认是public,class默认是private 。

 

4、关键字不同

在类中可以使用但是在结构中限制使用的关键字有:abstract、sealed、protected;

StaTIc关键字可以用在类名前面用来声明静态类,但是不能用在struct前面,不存在静态结构。

 

5、初始化不同

类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。

 

类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

在C语言中,为了实现我想要的结构,可以自定义定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的成员,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。

在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函数。

 

看到一段话,觉得讲的挺好的:

struct 与class本质上应该是相同的,之所以要保留struct,很大一部分原因是为了与C兼容吧(C++的一篇文章中是这么说的,我感觉还是有一定的道理)。class感觉是应该是struct的扩充,除了可以设置成员的访问类型外,还可以有自己的成员函数,可以继承派生等,好象struct能做的class 都能做,但反过来就不行了,如果没有保护数据的要求,struct能做的我都用struct做,比较简单。

慢慢补充。。。

 

posted @ 2020-09-30 10:39  十方央丶  阅读(2374)  评论(0)    收藏  举报