struct
- c++中的结构体struct:之所以单独提及c++中的结构体是因为在c++中,结构体的这个类型已经得到了完全的扩充,事实上几乎完全可以将结构体struct与类class相互替换,只需注意些许细微的差异即可,是的,在c++中,结构体这一类型本身已经被扩充到和类几乎完全一样了,成员函数、继承、派生、基类、虚基类、虚函数、纯虚函数等性质均被引入到了结构体中,同时在声明结构体实例的时候也完全可以选择性带上或者不带struct关键字(C语言中强制带上),如上所言c++中结构体甚至可以说成是类类型的别名也无大错,性质也几乎都可参照类类型,故这里只讨论struct与class的几个需要注意的不同之处。
- 类类型的默认访问权限为private(如 不加任何权限说明符时声明的成员为private,不加任何权限说明符的继承方式为private),结构体的默认访问权限为public(如 不加任何权限说明符时声明的成员为public,不加任何权限说明符的继承方式为public),当然,尽量显式声明访问权限是个好习惯。
- class关键字除了定义类类型,还可以用于模板(等同于typeneme),而struct关键字则没有这一性质。
- 当仅作为数据集合来使用结构体时不应该为其添加类类型的性质(如构造函数、析构函数等),仅仅如同在C语言中一样使用就好,当想要作为一个类来使用的时候则应当增添属于类类型的相关基本属性(如构造函数、析构函数等)
enum
- c++中的enum:c++中的enum的定义格式与C语言有些许不同,其主要是为了规避C语言的enum存在的一些潜在的问题(及将enum元素实际当做int来使用)
- 格式:
- enum class type_NAME{factor1, factor2, …};
- 差异:
- 在C语言中,enum元素被视为int,故可以参与int的比较或是运算,但在c++中的上述定义下则不可以
- 在C语言中,定义时元素的对应值可以手动更改(如:factor2 = 100, factor3,…),但在上述定义下则不可以
- 上述定义下的枚举被视为绝对的常量,可以视作字面常量进行运用(如switch中的case)