C++ 中的union、struct和class的异同

C++ 中的unionstructclass的异同

Version 1.1

本文中写的都是它们在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()"<<endl;

};

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()"<<endl;

};

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 ()"<<endl;

};

public:

char getChar(){

return m_cChar;

};

private:

void initializePara(){

m_iInt = 0;

m_cChar = 'A';

};

};

<!--[if !supportLists]-->1.<!--[endif]-->Unionstruct class 都可以像对象一样,定义成员数据和成员函数。

<!--[if !supportLists]-->2.<!--[endif]-->Union struct 默认的成员是public的,而class 默认的是 private

<!--[if !supportLists]-->3.<!--[endif]-->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

{

};

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

以上是对这3个的异同做一定的总结。

(完)

关于本文:本文版本为Version 1.1,完成于2005.03.12。你可以在我的个人主页和BLOG上找到本文原文。如果有什么意见或建议,望不吝赐教,谢谢!J

主页:http://zijinshi.cn

BLOGhttp://blog.csdn.net/zijinshi,

Email[email protected]

Frank

2005.03.11 - 2005.03.12

你可能感兴趣的:(C++,c,C#,Blog,读书)