c++中的联合
来源:互联网 发布:js写99乘法表 编辑:程序博客网 时间:2024/05/17 04:35
最近工作中用到了联合这个类,根据联合中的所有变量共用一段内存,写了一个模板接口函数,而此接口函数只需往里面传入数据的类型和一个联合的引用,就可以在同一个数据结构中存储或者取出不同的数据类型(代码由于没整理出来,暂且不贴),感觉还比较好用,故对联合又多了解了点。
联合也是个c++类,但由于联合它自身的特性,所以联合少了很多一般c++类中的很多特性,比如:
1.联合类不能作为基类,也不能从别的类派生而来
2.正因为联合不能作为父类,也不能作为子类,故联合中不能有虚函数
3.联合中的成员变量一般是内置的数据类型,但也可以有自己定义的数据类型,但是联合中的变量的数据类型不能有自己定义的构造函数和析构函数
比如:
struct A
{
int a;
int b;
A(){}
};
struct B
{
int a;
int b;
};
struct C
{
A a;
};
union D
{
A a;//错误,A类型中有自己定义的构造函数
B b;//正确
C c;//错误,C类型中也有自己定义的构造函数
};
4.联合中也可以定义自己的构造函数,析构函数,可以有重载,有出了虚函数的其它函数
5.联合初始化时做到初始化内存最大的成员,而且只需初始化其中一个成员一次
如:
union D
{
int a;
double b;
long long c;
char buf[32];
};
而此时D类所占内存为32字节,buf为其中内存长度最长的数据成员只需要对buf进行初始化即可(因为这里最长的是char[]类型,故不能在初始化列表中初始化,这里只是赋值)
如:
D::D()
{
memset(buf,0,sizeof(buf));
}
而以下错误
D::D():a(0),b(0),c(0)//b,c已经被初始化,不能被初始化两次(要分清初始化和赋值的区别)
{
memset(buf,0,sizeof(buf));
}
- C/C++中的联合 union
- C/C++中的联合 union
- C/C++中的联合 union
- C语言中的结构和联合详解
- C联合
- C++、 C 中的结构体、联合和枚举 异同
- c语言中的结构(struct)和联合(union)
- c语言中的结构(struct)和联合(union)
- C中的结构,联合,枚举(持续总结中...)
- C++结构体、联合、枚举与C语言中的区别
- C/C++:Unions 联合
- Hibernate 中的联合主键
- c++中的联合
- mysql中的联合查询
- Hibernate 中的联合主键
- Sqlserver 中的联合查询
- SQL中的联合查询
- VC++中的匿名联合
- new和malloc区别?
- 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
- 关闭进程
- remoting的研究
- 第一次接触博克
- c++中的联合
- 一个人学VC,感觉就像蒙着眼睛用手摸着走路,不知道哪里是正确的方向,处处都是障碍,时时都会碰头
- sql server 中取得最后插入记录的自动编号ID
- TortoiseSVN菜单项功能说明
- 全球只生产24台的超级跑车
- 无人不谈的云计算
- C#读写文件总结
- 2009.03.26
- 常用技巧:用PHP控制您的浏览器cache