在類的內(nèi)部定義新的類型,并引伸出union的妙用
在類內(nèi)部其實(shí)是可以定義一些類型的,比如struct、union、class,其實(shí)也就只有這三類可以被定義,
也只有這三類可以定義它們各自的對象,然后“.”出來或者“->”出來,C++中只有這三類了。
對于它們各自來說,在一個(gè)類的內(nèi)部都可以有三種方式來定義它們,比如對于union,
第一種方式://定義了一個(gè)union類型,并且定義了一個(gè)屬于該類型的對象un,因此sizeof(X)==4
class X{
public:
union UN{
int m_nX;
char* pchar;
}un;
};
第二種方式://定義了一個(gè)union類型,但并沒有定義屬于該類型的任何對象,因此sizeof(X)==0
class X{
public:
union UN{
int m_nX;
char* pchar;
};
};
第三種方式://定義了一個(gè)匿名的union類型,因此也就只能在X內(nèi)部使用了,并且此種情況隱含著已經(jīng)
在X中定義了一個(gè)屬于該匿名union類型的對象,因此sizeof(X)==4,并且此種情況最為特殊,可以直接
通過類X的對象來使用m_nX和pchar,例如X x;x.m_nX=10;x.pchar="Hello World!";
class X{
public:
union {
int m_nX;
char* pchar;
};
};
對于前兩種方式,都在類的內(nèi)部定義了一個(gè)新的具有名字的型別,因此可以用這種新的類型來定義對應(yīng)
于該類型的對象,例如:X::UN myun;但是這種定義是要求類內(nèi)部的union在定義時(shí)的修飾符為public,
否則就不能在類外部定義屬于他們的對象,而只能在給類X內(nèi)部使用了。
同理也可以知道在類內(nèi)部通過typedef定義出來的新型別也是如此。
需要說明的是,union用類里以第三種定義的方式出現(xiàn)的話,會有很奇妙的效果,非常奇妙,或許在今
后的編程過程中可以加以利用。m_nX和pchar共享一塊4個(gè)字節(jié)的內(nèi)存,只要不是同時(shí)需要m_nX和pchar
出現(xiàn)的情況都可以只利用它們其中的一個(gè),從而節(jié)省了內(nèi)存開銷。
posted on 2008-07-13 20:52 so true 閱讀(989) 評論(1) 編輯 收藏 所屬分類: C&C++