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做,比较简单。
慢慢补充。。。
最新文章
- git 本地分支与远程分支
- visual studio 2012如何彻底删除TFS上的团队项目
- bzoj4046
- http://jingyan.baidu.com/article/e4511cf33479812b855eaf67.html
- HDU4614【线段树。】
- C语言可变参数在宏定义中的应用
- 转:几十种编程语言的快速入门教程- learnxinyminutes.com
- XShell连接 Linux系统,显示中文乱码
- OpenGL研究2.0 计算圆
- visio UML用例里面找不到include关系
- Spark环境搭建
- Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=val错误
- Layer-level的快速算法
- SpringBoot注册Servlet、Filter、Listener
- P1373 小a和uim之大逃离(动态规划)
- C# to IL 10 Exception Handling(异常处理)
- DB通用类:MySQL通用类
- retry之python重试机制
- 面图层拓扑检查和错误自动修改—ArcGIS案例学习笔记
- 20155218 2006-2007-2 《Java程序设计》第3周学习总结
热门文章
- 开机自起tomcat
- Vulkan Driver for VC4(Raspberry Pi 3b) base on mesa
- Linux的top命令及交换分区
- rsync 守护进程模式搭建 与常见报错
- Java中的微信支付(1):API V3版本签名详解
- mysql 索引的原理(超细)
- element ui实现form验证起始时间不能大于结束时间
- 计算机网络:TCP协议建立连接的过程为什么是三次握手而不是两次?【对于网上的两种说法我的思考】
- 团灭 LeetCode 股票买卖问题
- 【Kubernetes学习笔记】-使用Minikube快速部署K8S单机学习环境