C++面试问题之struct,union和class的区别
在软件开发工程师中,笔试和面试有时候会问到一些细节问题,比如C语言和C++中struct的区别,不了解C语言的人可能还不太清楚。C++笔试和面试经常遇到的就是struct和class的区别,想必几乎所有准备的人都会回答这个问题,但是继续问union与他们的区别呢?可能很多人一时都无法回答出来。
CSDN有位仁兄说的好啊,struct是妈妈,union是爸爸,class是儿子,class可以继续生叫派生。
struct和class没有本质的区别,从语法上讲,区别在于两点:默认集成权限和成员默认访问权限。不同人之间编程风格有差异,个人偏好使用class。个人觉得struct一般不提倡使用函数做为其成员且不提倡struct的复杂继承。
class成员默认权限是private,而union成员默认权限是public
class A{ int a; public: int b;}; //a的权限为private
struct B{int a; privat: int b}; //a的权限为public
union是一种特殊的struct,利用union可以用相同的存储空间来存储不同的数据类型,从而节省空间。union一次只能使用一个成员,这样说还是比较抽象,看下面这个列子:
#include<iostream>
using namespace std;
union WeightType{
int wtInOunces;
int wtInPound;
float wtInTons;
};
void main(){
WeightType wtType;
wtType.wtInOunces=5;
//wtInOunces已经不再需要,内存被重新使用。
wtType.wtInPound=10;
cout<<wtType.wtInOunces; // 10
cout<<wtType.wtInPound; // 10
cout<<wtType.wtInTons; // 1.4013e-044
system(“pause”);
}
C++中union不可以存储有构造函数的类的对象,但可以存储没有构造函数的类的对象。