• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            天下

            記錄修行的印記

            c++嵌套類(lèi)

            #include "stdafx.h"

            /*
            c++嵌套類(lèi)
            可以在另一個(gè)類(lèi)內(nèi)部定義一個(gè)類(lèi),這樣的類(lèi)嵌套類(lèi)(nested class)
            嵌套類(lèi)是獨(dú)立的類(lèi),基本上與它們外圍類(lèi)不相關(guān),因此,外圍類(lèi)和嵌套類(lèi)的對(duì)象是互相獨(dú)立的。
            嵌套類(lèi)型的對(duì)象不具備外圍類(lèi)所定義的成員,同樣,外圍類(lèi)的成員也不具備嵌套類(lèi)所定義的成員。

            在一個(gè)類(lèi)的內(nèi)部定義另一個(gè)類(lèi),我們稱(chēng)之為嵌套類(lèi)(nested class),或者嵌套類(lèi)型。之所以引入這樣一個(gè)嵌套類(lèi),往往是因?yàn)橥鈬?lèi)需要使用嵌套類(lèi)對(duì)象作為底層實(shí)現(xiàn),并且該嵌套類(lèi)只用于外圍類(lèi)的實(shí)現(xiàn),且同時(shí)可以對(duì)用戶(hù)隱藏該底層實(shí)現(xiàn)。

            雖然嵌套類(lèi)在外圍類(lèi)內(nèi)部定義,但它是一個(gè)獨(dú)立的類(lèi),基本上與外圍類(lèi)不相關(guān)。它的成員不屬于外圍類(lèi),同樣,外圍類(lèi)的成員也不屬于該嵌套類(lèi)。嵌套類(lèi)的出現(xiàn)只是告訴外圍類(lèi)有一個(gè)這樣的類(lèi)型成員供外圍類(lèi)使用。并且,外圍類(lèi)對(duì)嵌套類(lèi)成員的訪(fǎng)問(wèn)沒(méi)有任何特權(quán),嵌套類(lèi)對(duì)外圍類(lèi)成員的訪(fǎng)問(wèn)也同樣如此,它們都遵循普通類(lèi)所具有的標(biāo)號(hào)訪(fǎng)問(wèn)控制。

            若不在嵌套類(lèi)內(nèi)部定義其成員,則其定義只能寫(xiě)到與外圍類(lèi)相同的作用域中,且要用外圍類(lèi)進(jìn)行限定,不能把定義寫(xiě)在外圍類(lèi)中。例如,嵌套類(lèi)的靜態(tài)成員就是這樣的一個(gè)例子。

            前面說(shuō)過(guò),之所以使用嵌套類(lèi)的另一個(gè)原因是達(dá)到底層實(shí)現(xiàn)隱藏的目的。為了實(shí)現(xiàn)這種目的,我們需要在另一個(gè)頭文件中定義該嵌套類(lèi),而只在外圍類(lèi)中前向聲明這個(gè)嵌套類(lèi)即可。當(dāng)然,在外圍類(lèi)外面定義這個(gè)嵌套類(lèi)時(shí),應(yīng)該使用外圍類(lèi)進(jìn)行限定。使用時(shí),只需要在外圍類(lèi)的實(shí)現(xiàn)文件中包含這個(gè)頭文件即可。


            另外,嵌套類(lèi)可以直接引用外圍類(lèi)的靜態(tài)成員、類(lèi)型名和枚舉成員(假定這些成員是公有的)。類(lèi)型名是一個(gè)typedef名字、枚舉類(lèi)型名、或是一個(gè)類(lèi)名。

            在嵌套類(lèi)的定義被看到之前我們只能聲明嵌套類(lèi)的指針和引用,如上面在A中定義為B m_b而不是B* m_b將會(huì)引發(fā)一個(gè)編譯錯(cuò)誤。
            關(guān)于C++嵌套類(lèi)的詳細(xì)用法請(qǐng)參考《C++ Primer 第三版》P551。    
            */

                
            //outerB.h
            //外圍類(lèi)outerB
            class outerB
            {
            public:
                outerB();
                ~outerB();
                void show();

                //嵌套類(lèi) innerA
                class innerA
                {
                public:
                    innerA();
                    ~innerA();
                    void _show();
                };
            private:
                innerA*  m_p_innerA;
            };



            //outerB.cpp
            outerB::outerB():m_p_innerA(new innerA)
            {
                printf("%s \r\n",__FUNCTION__);
            }

            outerB::~outerB()
            {
                printf("%s \r\n",__FUNCTION__);
                if (m_p_innerA!=NULL)
                {
                    delete m_p_innerA;
                }
            }


            void outerB::show()
            {
                m_p_innerA->_show();
                printf("%s \r\n",__FUNCTION__);
            }
            outerB::innerA::innerA()
            {
                printf("%s \r\n",__FUNCTION__);
            }
            outerB::innerA::~innerA()
            {
                printf("%s \r\n",__FUNCTION__);
            }


            void outerB::innerA::_show()
            {
                printf("%s \r\n",__FUNCTION__);
            }

            int _tmain(int argc, _TCHAR* argv[])
            {
                outerB x;
                x.show();
                return 0;
            }

            //輸出
            /*

            outerB::innerA::innerA
            outerB::outerB
            outerB::innerA::_show
            outerB::show
            outerB::~outerB
            outerB::innerA::~innerA
            */

            posted on 2013-04-22 15:05 天下 閱讀(3946) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C/C++

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(4)

            隨筆分類(lèi)(378)

            隨筆檔案(329)

            鏈接

            最新隨筆

            搜索

            最新評(píng)論

            国产成人无码精品久久久性色| www亚洲欲色成人久久精品| 久久无码一区二区三区少妇| 欧美一级久久久久久久大| 欧美亚洲国产精品久久高清| 久久精品亚洲AV久久久无码| 久久久久夜夜夜精品国产| 久久久久女教师免费一区| 久久精品国产亚洲av日韩| 99久久国产综合精品网成人影院 | 日韩av无码久久精品免费| 狠狠色噜噜狠狠狠狠狠色综合久久| 精品久久久久中文字| 无码超乳爆乳中文字幕久久 | 国产亚洲美女精品久久久2020| 国产精品99久久免费观看| 一级A毛片免费观看久久精品| 国产精品一区二区久久精品| 色综合久久中文字幕综合网| 午夜精品久久久久久99热| 激情伊人五月天久久综合| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产69精品久久久久观看软件 | 色诱久久av| 久久成人小视频| 99999久久久久久亚洲| 久久国产香蕉视频| 国产成人精品久久免费动漫| 午夜精品久久影院蜜桃| 99999久久久久久亚洲| 国产69精品久久久久9999APGF| 品成人欧美大片久久国产欧美| 麻豆成人久久精品二区三区免费| 久久国产AVJUST麻豆| 色综合久久久久久久久五月| 久久久久久青草大香综合精品| 久久精品天天中文字幕人妻| 国产精品乱码久久久久久软件| 精品乱码久久久久久夜夜嗨| WWW婷婷AV久久久影片| 国产aⅴ激情无码久久|