结构体和类的区别
- 结构体是值类型,类是引用类型;
- 结构体存储在栈上,类存储在堆上;
- 结构体成员不能使用protected访问修饰符,类可以;
- 结构体变量声明不能指定初始值,类可以;
- 结构体不能声明无参的构造函数,类可以;
- 结构体声明有参构造函数后,无参构造函数不会被顶掉;
- 结构体不能声明析构函数,类可以;
- 结构体不能被继承,类可以;
- 结构体需要在构造函数中初始化所有成员变量,类随意;
- 结构体不能被静态static修饰,即不存在静态结构体,类可以;
- 结构体不能在自己内部声明和自己一样的结构体变量,类可以;
结构体特殊之处:结构体可以继承接口,接口是行为的继承。
如何选择结构体和类?
- 想要使用继承和多态时,使用类,不使用结构体,比如玩家、怪物等。
- 对象是数据集合时,优先考虑结构体,比如位置、坐标等。
- 从值类型和引用类型的区别上考虑,比如经常被赋值传递的对象,
并且改变复制对象,原对象不想跟着变化时,就用结构体。比如坐标、向量、旋转等。