文档章节

联合 union

pp__qq
 pp__qq
发布于 2014/04/13 08:47
字数 611
阅读 80
收藏 0

union是一个特殊的类

  • 具有类的一些特征,如:

    • 可以使用 public,private,protected 来限定成员的可见性.

    • 可以具有 数据成员,函数成员,类型成员 .如:

union    Class{
private:
    int        _s;/* 数据成员 */
public:
    typedef    int    value_type;/* 类型成员 */
public:
    Class();
    Class(int);
    Class(const Class&);
    void    test();
};

  • 同时不具有类的如下特征:

    • 不可以出现继承层次中,即不可以用作基类,也不可以继承其他的类.

      • 成员函数不可以为虚函数,因为union不可以出现在继承层次中.

    • 数据成员不可以是如下类型:

      • 不可以是静态类型,

      • 不可以是引用类型.

      • 不能具有定义了构造函数,析构函数,赋值操作符的类类型成员;该限制包括了具有带构造函数,析构函数,赋值操作符的成员的类.

  • union的特殊之处: union中的数据成员具有相同的起始地址,所以同一时刻只有一个成员的值具有意义.

匿名union

  • 当union用于声明一个未命名的联合时,更像是一个动词,表示定义若干个变量,而且让这些变量具有相同的起始地址.如:

    • 所以可以理解'匿名联合的成员的名字出现在定义union的作用域中'.

static  union{
    int     _i;
    float   _j;
};
/**
 * 相当于: int _i;float _j;只不过union限定了_i,_j具有相同的起始地址.
 * 注意未命名union中的名字出现在定义union的作用域中.所以_i,_j就像在全局作用域中直接定义一样.
 */

int     main( int argc,char *argv[] ){
    ::_i =33;       /* _i相当于直接在全局作用域中定义一样,_i定义在全局命名空间中 */
    printf("%d\t%f\n",_i,_j);   
    _j =3.3;
    printf("%d\t%f\n",_i,_j);
}

class	X{
	int 	_i;
	union{
		int	_j;
		float	_f;
	};
};
/**
 * 相当于:
 * class	X{
 * int	_i;
 * int	_j;
 * float _f;
 * };
 * 只不过 _j,_f 具有相同的起始地址.
 */

#define     Union(x)    union{ x };
int main(int argc,char *argv[]){
    Union(int i;float j;);
    /** 相当于在 main() 形成的局部作用域中定义了 int i;float j; 只不过 i,j 具有相同的起始地址. */
    j=33;
    printf("%d\t%f",i,j);
}

  • 当union作为一个未命名联合出现在全局作用域时,应该使用static修饰.见上.可能是用来强调未命名的联合不对其他文件具有可见性. 


© 著作权归作者所有

上一篇: 枚举类型
pp__qq
粉丝 17
博文 66
码字总数 97223
作品 0
合肥
程序员
私信 提问
【转载】SQL语句中Union和Union All的区别

在使用到SQL语句进行数据库查询的过程中,如果需要求两个数据集合的并集,一般会使用到联合查询关键字Union或者Union All,其实Union和Union All两者的使用有一定差别,查出来的数据在有些情...

江湖逍遥
04/04
0
0
MySQL实战6 分页查询和联合查询

MySQL实战 目录 1.分页查询 案例:查询前5条员工数据 注意:如果从第一条开始,这个0可以省略:SELECT * FROM employees LIMIT 5; 案例:查询第11条到第25条 案例:查询有奖金且工资最高的前1...

香沙小熊
04/20
0
0
PHP面试之复杂MySQL语句的编写

真题 有A(id,sex, par, cl, c2)、B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条SQL语句,将B中age>50的记录的c1,c2更新到A表中统一记录中的c1,c2字段中。 MySQL的关联update操...

openoter
2018/04/20
0
0
mysql union不能嵌套union语句吗

要查询的情况是 1查询条件联合2查询的条件后分页取4条, 然后 再联合 3条件和4条件查询的结果取4条, 不知道Mysql 会不会有union不能嵌套union的限制, 但是从报错情况看,确实是像这个样子 ...

huangtian
2014/06/09
307
3
SQL注入--显注和盲注中过滤逗号绕过

SQL注入逗号绕过 1.联合查询显注绕过逗号 在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联合查询不能用了。 ...

晓枫v5
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

分布式协调服务zookeeper

ps.本文为《从Paxos到Zookeeper 分布式一致性原理与实践》笔记之一 ZooKeeper ZooKeeper曾是Apache Hadoop的一个子项目,是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它...

ls_cherish
今天
4
0
redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部