• <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++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            C++局部類(lèi)和嵌套類(lèi)的區(qū)別

             局部類(lèi)

              在一個(gè)函數(shù)體內(nèi)定義的類(lèi)稱(chēng)為局部類(lèi)。局部類(lèi)中只能使用它的外圍作用域中的對(duì)象和函數(shù)進(jìn)行聯(lián)系,因?yàn)橥鈬饔糜蛑械淖兞颗c該局部類(lèi)的對(duì)象無(wú)關(guān)。局部類(lèi)不能被外部所繼承。在定義局部類(lèi)時(shí)需要注意:局部類(lèi)中不能說(shuō)明靜態(tài)成員函數(shù),并且所有成員函數(shù)都必須定義在類(lèi)體內(nèi)。在實(shí)踐中,局部類(lèi)是很少使用的。下面是一個(gè)局部類(lèi)的例子。
              int a;
              
            void fun()
              
            {
              
            static int s;
              
            class A
              
            {
                
            public:
                
            void init(int i) { s = i; }
              }
            ;
              A m;
              m.init(
            10);
              }


            局部類(lèi)的另一個(gè)用途是用來(lái)實(shí)現(xiàn)類(lèi)型轉(zhuǎn)化,如下代碼:

            class Interface
            {
            public:
               
            virtual void Fun() = 0;  
            }
            ;

            template 
            <class T, class P>
            Interface
            * MakeAdapter(const T& obj, const P& arg)
            {
                
            int x;
               
            class Local : public Interface
               
            {
               
            public:
                  Local(
            const T& obj, const P& arg)
                     : obj_(obj), arg_(arg) 
            {}
                  
            virtual void Fun()
                  
            {
                      x 
            = 100;
                     obj_.Call(arg_);
                  }

               
            private:
                  T obj_;
                  P arg_;
               }
            ;
               
            return new Local(obj, arg);
            }


              嵌套類(lèi)


              在一個(gè)類(lèi)中定義的類(lèi)稱(chēng)為嵌套類(lèi),定義嵌套類(lèi)的類(lèi)稱(chēng)為外圍類(lèi)。

              定義嵌套類(lèi)的目的在于隱藏類(lèi)名,減少全局的標(biāo)識(shí)符,從而限制用戶能否使用該類(lèi)建立對(duì)象。這樣可以提高類(lèi)的抽象能力,并且強(qiáng)調(diào)了兩個(gè)類(lèi)(外圍類(lèi)和嵌套類(lèi))之間的主從關(guān)系。下面是一個(gè)嵌套類(lèi)的例子:

             class A
              
            {
               
            public:
                
            class B
                
            {
                
            public:
                  …
                
            private:
                  …
                }
            ;
                
            void f();
                
            private:
                
            int a;
              }




               其中,類(lèi)B是一個(gè)嵌套類(lèi),類(lèi)A是外圍類(lèi),類(lèi)B定義在類(lèi)A的類(lèi)體內(nèi)。

              對(duì)嵌套類(lèi)的若干說(shuō)明:

              1、從作用域的角度看,嵌套類(lèi)被隱藏在外圍類(lèi)之中,該類(lèi)名只能在外圍類(lèi)中使用。如果在外圍類(lèi)的作用域內(nèi)使用該類(lèi)名時(shí),需要加名字限定。

              2、從訪問(wèn)權(quán)限的角度來(lái)看,嵌套類(lèi)名與它的外圍類(lèi)的對(duì)象成員名具有相同的訪問(wèn)權(quán)限規(guī)則。不能訪問(wèn)嵌套類(lèi)的對(duì)象中的私有成員函數(shù),也不能對(duì)外圍類(lèi)的私有部分中的嵌套類(lèi)建立對(duì)象。

              3、嵌套類(lèi)中的成員函數(shù)可以在它的類(lèi)體外定義。

              4、嵌套類(lèi)中說(shuō)明的成員不是外圍類(lèi)中對(duì)象的成員,反之亦然。嵌套類(lèi)的成員函數(shù)對(duì)外圍類(lèi)的成員沒(méi)有訪問(wèn)權(quán),反之亦然。國(guó)此,在分析嵌套類(lèi)與外圍類(lèi)的成員訪問(wèn)關(guān)系時(shí),往往把嵌套類(lèi)看作非嵌套類(lèi)來(lái)處理。這樣,上述的嵌套類(lèi)可寫(xiě)成如下格式:

              class A
              {
              public:
                void f();
              private:
                int a;
              };

                class B
              {
                public:
                …
              private:
                …
              };

              由引可見(jiàn),嵌套類(lèi)僅僅是語(yǔ)法上的嵌入。

              5、在嵌套類(lèi)中說(shuō)明的友元對(duì)外圍類(lèi)的成員沒(méi)有訪問(wèn)權(quán)。

              6、如果嵌套類(lèi)比較復(fù)雜,可以只在外圍類(lèi)中對(duì)嵌套類(lèi)進(jìn)行說(shuō)明,關(guān)于嵌套的詳細(xì)的內(nèi)容可在外圍類(lèi)體外的文件域中進(jìn)行定義。


            參考:C++編程思想和網(wǎng)絡(luò)文章。

            posted on 2007-05-24 17:20 夢(mèng)在天涯 閱讀(10682) 評(píng)論(1)  編輯 收藏 引用 所屬分類(lèi): CPlusPlus

            評(píng)論

            # re: C++局部類(lèi)和嵌套類(lèi)的區(qū)別 2007-06-10 19:07 黃大仙

            收藏  回復(fù)  更多評(píng)論   

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            隨筆分類(lèi)

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            97精品伊人久久久大香线蕉| 亚洲午夜精品久久久久久浪潮| 久久精品国产亚洲av水果派 | A级毛片无码久久精品免费| 久久精品国产精品亜洲毛片| 国内精品人妻无码久久久影院导航 | 无码国产69精品久久久久网站| 久久精品国产亚洲av水果派 | 国产 亚洲 欧美 另类 久久| 综合久久国产九一剧情麻豆 | 久久AⅤ人妻少妇嫩草影院| 国产成人精品久久| 久久国产精品二国产精品| 国产亚洲欧美精品久久久| 亚洲精品无码久久久久AV麻豆| 久久香蕉一级毛片| 人妻精品久久无码区| 亚洲国产一成久久精品国产成人综合 | 久久国产成人精品国产成人亚洲| 一本一道久久综合狠狠老| 人妻精品久久久久中文字幕| 四虎国产精品免费久久5151| 精品久久久久久无码中文字幕一区| 亚洲精品无码久久毛片| 久久久久99精品成人片三人毛片| 久久国产精品久久久| 国产亚洲美女精品久久久久狼| 婷婷伊人久久大香线蕉AV| 久久亚洲精品国产精品婷婷| 香蕉99久久国产综合精品宅男自 | 久久久久亚洲av成人无码电影| 亚洲成人精品久久| 国产亚洲欧美成人久久片| 久久福利青草精品资源站| 国产精品久久久久9999高清| 国产精品久久久久久一区二区三区| 精品久久久无码人妻中文字幕豆芽| AV狠狠色丁香婷婷综合久久| www.久久热.com| 久久e热在这里只有国产中文精品99 | 国产精品免费福利久久|