结构体Struct、联合体Union与类Class

发布时间 2023-08-18 12:03:45作者: 石中火本火

结构体Struct、联合体Union与类Class

1. Struct/Class

struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!!

1.1 最本质的区别是默认的访问控制;

结构体的继承是public的,class的继承是private的;

两者也可以交叉继承,继承权限由子类决定,如结构体B继承类A,则为public继承,反之为private继承;

1.2 再一个区别就是默认的成员变量访问控制

class是private,struct是public;

列表初始化对于基本的数据结构有用,若结构体或者类中加入了虚函数或构造函数就体现出对象的特性,无法使用列表初始化;

ref:https://cloud.tencent.com/developer/article/1120285

2. struct与Union

与struct相比,最显著的区别就是Union中的成员变量共享一段内存。

另外Union无法被继承,不能拥有静态成员与引用成员

ref:https://blog.csdn.net/K346K346/article/details/47660521

使用场景:1.节省内存空间;2.数据类型转换;3.粗粒度位操作,可以将一个整数拆分成多个位,比如一个Union中两个成员。一个int,一个char[4]数组,则可以通过char数组实现对int的字节粒度上的操作。

Union可以使用新特性:std::variant进一步保证类型安全;详情见