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