类(Class)和结构体(Struct)的区别
1.C和C++中的结构体的区别
(1)在C语言中:
- 结构体是复合类型的一种,是一些相同类型或不同类型元素的集合,数据和数据操作是分开的;;
- 结构体可以声明为变量、指针和数组等,用以实现复杂的数据结构;
- 在C语言中,结构体不能包含函数;
- 在C中定义一个结构体类型要用typedef,如果没有,声明时需要加上struct;
(2)在C++中:
-
数据和对象是一个整体,不应该分开;
-
在C++中,不需要使用typedef;
-
在C++中struct得到了很大的扩充:
-
struct可以包括成员函数;
-
struct可以实现继承;
-
struct可以实现多态;
-
2.C++中struct和class的区别
(1)默认的继承访问权限:
class默认是private,struct默认是public;
(2)默认的访问权限:
struct作为数据结构的实现体,它默认的访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的;
(3)关键字class可用于定义参数模板参数,关键字struct不用于定义模板参数;
(4)class具有public,private,protected三种属性,而struct只有public默认属性;
(5)class具有三种继承方式,即有9中访问权限,结构体只有一种;
(6)class有专属的构造函数、析构函数等先天具备的函数;
(7)class以下几个功能是struct没有的:
- class可以继承,子类可以使用父类的特性和方法;
- 类型转换可以在runtime的时候检查和解释一个实例的类型;
- 可以用deinit来释放资源;
- 一个类可以被应用多次;
(8)struct的独特优势:
- 结构较小,适用于复制操作,相比于一个class的实例被多次引用更加安全;
- 无需担心内存memory leak或者多线程冲突问题;