<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    在類的內部定義新的類型,并引伸出union的妙用

    在類內部其實是可以定義一些類型的,比如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,例如X x;x.m_nX=10;x.pchar="Hello World!";
    class X{
    public:
     union {
      int m_nX;
      char* pchar;
     };
    };
    對于前兩種方式,都在類的內部定義了一個新的具有名字的型別,因此可以用這種新的類型來定義對應

    于該類型的對象,例如:X::UN myun;但是這種定義是要求類內部的union在定義時的修飾符為public,

    否則就不能在類外部定義屬于他們的對象,而只能在給類X內部使用了。

    同理也可以知道在類內部通過typedef定義出來的新型別也是如此。

    需要說明的是,union用類里以第三種定義的方式出現的話,會有很奇妙的效果,非常奇妙,或許在今

    后的編程過程中可以加以利用。m_nX和pchar共享一塊4個字節的內存,只要不是同時需要m_nX和pchar

    出現的情況都可以只利用它們其中的一個,從而節省了內存開銷。

    posted on 2008-07-13 20:52 so true 閱讀(988) 評論(1)  編輯  收藏 所屬分類: C&C++

    評論

    # re: 在類的內部定義新的類型,并引伸出union的妙用  回復  更多評論   

    你真是太厲害啦!受益匪淺!希望你能多寫些這樣的好文章!
    2008-07-14 21:28 | pig
    主站蜘蛛池模板: 一区二区免费电影| 老色鬼久久亚洲AV综合| 国产亚洲福利在线视频| 91精品视频免费| 亚洲国产成人久久| 在线观看免费人成视频| 97se亚洲国产综合自在线| 丁香花在线观看免费观看| 亚洲中文字幕精品久久| 在线免费视频一区| 免费看一级高潮毛片| 国产精品亚洲不卡一区二区三区| 成人午夜免费视频| 久久久精品国产亚洲成人满18免费网站 | 成人国产网站v片免费观看| 免费少妇a级毛片人成网| 久久国产精品免费| 亚洲AV无码1区2区久久| 在线看片韩国免费人成视频| 亚洲人成网站看在线播放| 韩国二级毛片免费播放| 亚洲av日韩aⅴ无码色老头| 亚洲一区二区三区乱码A| 免费h视频在线观看| 亚洲乱码无限2021芒果| 国产高清在线免费视频| 好湿好大好紧好爽免费视频| 99人中文字幕亚洲区| 成人无遮挡毛片免费看| 成在线人免费无码高潮喷水| 亚洲小视频在线观看| 日韩免费a级毛片无码a∨| 美女无遮挡免费视频网站| 亚洲AV无码精品色午夜果冻不卡| 最近在线2018视频免费观看| 亚洲av无码有乱码在线观看| 亚洲熟妇av一区二区三区| 成年免费大片黄在线观看岛国| 老司机午夜性生免费福利| 亚洲人成电影亚洲人成9999网| 全免费A级毛片免费看网站|