C++中结构体与类的区别介绍
在参与以C++为编程基础的项⽬应⽤中总会遇到结构体类型与类的数据类型,但是其具体应⽤区别模糊不清
现将其区别总结如下,欢迎补充共同学习(先介绍C和C++中结构体的不同,再对⽐C++中结构体与类的区别)
⼀、C和C++中结构体的不同
(1)C语⾔中的结构体不能为空,否则会报错
C语⾔中要求⼀个结构或联合⾄少有⼀个成员。C语⾔中,空结构体的⼤⼩为0,⽽C++中空结构体(属于空类)的⼤⼩为1
(2)C语⾔中的结构体只涉及到数据结构,⽽不涉及到算法
在C语⾔中数据结构和算法是分离的。换句话说就是C语⾔中的结构体只能定义成员变量,但是不能定义成员函数
然⽽在C++中既可以定义成员变量⼜可以定义成员函数, C++中的结构体和类体现了数据结构和算法的结合
不过虽然C语⾔的结构体中不能定义成员函数,但是却可以定义函数指针,不过函数指针本质上不是函数⽽是指针,所以总的来说C语⾔中的结构体只是⼀个复杂数据类型 ,只能定义成员变量,不能定义成员函数,不能⽤于⾯向对象编程
(3)C语⾔中定义结构变量时不可省略struct关键字,C++可以省略
在C语⾔中使⽤struct定义的结构体中在定义变量的时候,struct不能省略
但是在C++之中则可以省略struct
⼆、C++中结构体与类的区别
C++中的struct对C中的struct进⾏了扩充,它已经不再只是⼀个包含不同数据类型的数据结构了,它已经获取了太多的功能
struct能包含成员函数吗? 能!
struct能继承吗? 能!!
struct能实现多态吗? 能
既然这些它都能实现,那它和class还能有什么区别?
最本质的⼀个区别就是默认的访问控制:
默认的继承访问权限:struct是public的,class是private的c语言struct头文件
C++中,不使⽤结构体丝毫不会影响程序的表达能⼒。C++之所以要引⼊结构体,是为了保持和C程序的兼容性
但有时仍会在C++中使⽤结构体,是因为可以使⽤结构体将不同类型数据组成整体,⽅便于保存数据(若⽤类来保存,因类中成员默认为私有,还要为每个数据成员特定函数来读取和改写各个属性,⽐较⿇烦)
struct可以继承class,同样class也可以继承struct
struct是⼀种数据结构的实现体,虽然它是可以像class⼀样的⽤。我依旧将struct⾥的变量叫数据,class内的变量叫成员,虽然它们并⽆区别
三、总结
概念:class和struct的语法基本相同,从声明到使⽤,都很相似,但是struct的约束要⽐class多,理论上,struct能做到的class都能做到,但class能做到的stuct却不⼀定做的到
类型:struct是值类型,class是引⽤类型,因此它们具有所有值类型和引⽤类型之间的差异
效率:由于堆栈的执⾏效率要⽐堆的执⾏效率⾼,但是堆栈资源却很有限,不适合处理逻辑复杂的⼤对象,因此struct常⽤来处理作为基类型对待的⼩对象,⽽class来处理某个商业逻辑
关系:struct不仅能继承也能被继承 ,⽽且可以实现接⼝,不过Class可以完全扩展。内部结构有区别,struct只能添加带参的构造函数,不能使⽤abstract和protected等修饰符,不能初始化实例字段
⽜⼈总结:
(1) 在表⽰诸如点、矩形等主要⽤来存储数据的轻量级对象时,⾸选struct
(2) 在表⽰数据量⼤、逻辑复杂的⼤对象时,⾸选class
(3) 在表现抽象和多级别的对象层次时,class是最佳选择
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论