Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707611
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类:

2007-11-25 10:22:29

本文中写的都是它们在C++中的异同,而非C中的,因为在C中无论是union还是stuct都没有操作,也没有访问控制的概念。

  这几天工作不是很忙,就顺手把Bruce EckelThinking in C++ Volume 1       翻着浏览一下。

看到Chapter 7中关于union这一节,竟然发现union也有类似于class的用法,咦,以前看的时候怎么就没有发现呢,是不是以前仅仅是走马观花?也或许这本书的确不错,它的精华我不可能第一次阅读的时候就能够全部体会到,因而每读一次就有新的体会。

Unionstruct class 的确是有很多类似的用法。这儿权当是读书笔记,记下来吧。 

这里,还是举例说明吧。

先定义如下三个抽象类型。

union unionA

{

    int m_iInt;

    char m_cChar;

       int getInt(){

initializePara();

};

  public:

unionA(){

initializePara();

};

    ~unionA(){

cout<<"unionA::~unionA()"<

};

  public:

char getChar(){           

return m_cChar;

};

  private:

    void initializePara(){

m_iInt = 0;

m_cChar = 'A';

};

};

struct structB

{

    int m_iInt;

    char m_cChar;

       int getInt(){

initializePara();

};

  public:

structB (){

initializePara();

};

    ~ structB (){

cout<<" structB::~ structB()"<

};

  public:

char getChar(){           

return m_cChar;

};

  private:

    void initializePara(){

m_iInt = 0;

m_cChar = 'A';

};

};

class classC

{

    int m_iInt;

    char m_cChar;

       int getInt(){

initializePara();

};

  public:

classC (){

initializePara();

};

    ~ classC (){

cout<<"classC::~ classC ()"<

};

  public:

char getChar(){           

return m_cChar;

};

  private:

    void initializePara(){

m_iInt = 0;

m_cChar = 'A';

};

};

  1.Unionstruct class 都可以像对象一样,定义成员数据和成员函数。

2.Union struct 默认的成员是public的,而class 默认的是 private

3.Union 既不能够继承,也不能被继承,而struct class 都可以用来继承和被继承。

如下例:

/*  // error

class classSubA: public unionA

{

};

*/  

 

/*   // error

union unionSubA: public unionA{

};

*/

struct structSubB:public structB{

};

  class classSubC: public classC{

};

struct structSubC:public classC{

};

  class classSubB:public structB{

};

  4.空间不同,如上例,int m_iInt; char m_cChar;共用相同的空间,其空间大小为他们中较大的一个(32位机中,int 4个字节,char 为一个字节)。而class struct 则不是的。

 因为 union 不支持继承,所以,也就不支持多态了,
我在VC6.0下试过了,确实是这样,
因为如果支持多态,不支持多继承,
那不是和没有一样吗。
而,struct 支持继承,它也支持多态,
有虚函数列表,和 class 一样

typedef unsigned short VARTYPE;
struct _tagMyVariant
{
       VARTYPE  vt;
       union
       
{
           LONG  lVal;
           BYTE  bVal;
           ...
       }
;
}
;
 

阅读(955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~