在C++中class与struct之间区别不大,两者有很大的相似性。保留struct是为了向下兼容,所以C++中保留了很多C的东西。
有关结构体和类具体可以参考以下链接:
1.struct
- C中,struct包含不同数据类型的数据结构体;
- C++中,struct做了扩充,与class的功能类似:
2.struct与class的区别
- 定义语法关键字不同(struct/class)
- struct是值类型,class是引用类型,
- struct存储在栈中,但其中定义的引用类型是存储在堆中的
- struct中字段不能赋初始值,class中字段没有影响
- struct不能定义无参数的构造方法,且在有参构造函数中必须为所有字段和属性赋值
- struct中有参构造方法不会覆盖默认的无参构造方法,即可以new无参的结构,class中有参构造方法会覆盖默认的无参构造方法,即无法调用默认无参构造方法,因此在class中最好定义一个无参构造方法,防止new创建对象失败。
- struct不能定义析构方法,class可以
- struct可以继承接口不可以继承class,class既可以继承接口,又可以继承class
- 默认访问权限。struct作为数据结构的实现体,数据的默认访问是public;class作为对象的实现体,默认的访问是private。虽然struct作为数据结构的实现体可以像class一样使用,但是在这里依旧将struct里的变量称为数据,class里的变量称为成员。
- 默认的继承访问权不同。class默认是private,struct默认是public。即class默认继承方式是private继承,而struct是public继承。所以类定义时要求指定继承方式。
- class关键字可用于定义模板参数,类似于typename,但struct关键字不可用于定义模板参数。如class定义模板类:
3 小结
struct是一种特殊的值类型,栈的空间小,访问速度快,struct适用于字段、属性较少,作为一种组合类型使用,而class作为一种面向对象拓展的类型使用。