so true

          心懷未來,開創(chuàng)未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數(shù)據(jù)加載中……

          在類的內(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++

          評論

          # re: 在類的內(nèi)部定義新的類型,并引伸出union的妙用  回復(fù)  更多評論   

          你真是太厲害啦!受益匪淺!希望你能多寫些這樣的好文章!
          2008-07-14 21:28 | pig
          主站蜘蛛池模板: 凌云县| 泸州市| 洛宁县| 松溪县| 黄石市| 弥渡县| 哈巴河县| 新民市| 昌乐县| 唐海县| 泾源县| 东乡族自治县| 逊克县| 广宗县| 贞丰县| 宁海县| 渭南市| 新巴尔虎右旗| 西峡县| 河津市| 广丰县| 类乌齐县| 木兰县| 大新县| 青冈县| 遂平县| 弥勒县| 渭南市| 通州区| 穆棱市| 始兴县| 兴宁市| 巩义市| 肇州县| 宝应县| 穆棱市| 曲阳县| 施甸县| 蓝山县| 天镇县| 彭州市|