struct在C与C++中的区别
为了兼容C语言,C++中也引入了struct关键字,并对struct的功能也进行了扩展。
C语言中:
Struct是用户自定义数据类型(UDT)。struct只能是一些变量的集合体,只能定义数据成员,不能定义函数,可以封装数据却不可以隐藏数据,而且成员不可以是函数。
C++语言中:
Struct是抽象数据类型(ADT),支持成员函数的定义。struct可以当作class来用,他和C++中class的唯一的区别是,class中的成员默认是private,而struct的成员默认为public。
C++中struct与class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,他还有其他功能。
- struct可以包含成员函数
- struct可以继承
- struct可以实现多态
虽然C++中struct与class如此相似,但他们也有一定的区别:
1、默认的继承权限不同
struct默认是公有继承(public),class默认是私有继承(private)
2、默认访问权限不同
struct中默认的成员访问权限是public的,class中默认的成员访问权限是private的。
3、C++中大括号初始化问题
对上图中这种使用{}进行初始化的方式直接使用在struct和class初始化中是会存在问题的:
- 如果struct和class中都定义了构造函数,就不能使用大括号对其进行初始化;
- 如果没有定义构造函数,struct可以使用{}进行初始化;class因为数据默认为私有,不能用{}初始化,除非class的所有数据成员及函数为public时,可以使用{}进行初始化。
- struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。
4、模板中使用不同
在模板中,类型参数前面可以使用class或typename,如果使用struct,则含义不同,struct后面跟的是“non-type template parameter”,而class或typename后面跟的是类型参数。
参考:
https://blog.youkuaiyun.com/qq_37964547/article/details/81835488