日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
介紹C++局部類(lèi)和C++嵌套類(lèi)之間的區(qū)別

如果嵌套類(lèi)型和其外部類(lèi)型之間的關(guān)系需要成員可訪(fǎng)問(wèn)性語(yǔ)義,需要使用C++嵌套類(lèi),嵌套類(lèi)型不應(yīng)針對(duì)其聲明類(lèi)型以外的類(lèi)型執(zhí)行任務(wù),而C++局部類(lèi)允許類(lèi)、結(jié)構(gòu)和接口被分成多個(gè)小塊兒并存儲(chǔ)在不同的源文件中,這樣的實(shí)現(xiàn)很容易開(kāi)發(fā)和維護(hù)。

C++局部類(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)的例子。

 
 
 
  1.  int a;
  2.   void fun()
  3.    {
  4.   static int s;
  5.   class A
  6.    {
  7.     public:
  8.     void init(int i)  { s = i; }
  9.   };
  10.   A m;
  11.   m.init(10);
  12.   }
  13. 局部類(lèi)的另一個(gè)用途是用來(lái)實(shí)現(xiàn)類(lèi)型轉(zhuǎn)化,如下代碼:
  14. class Interface
  15. {
  16. public:
  17.    virtual void Fun() = 0;  
  18. };
  19. template  T, class P>
  20. Interface* MakeAdapter(const T& obj, const P& arg)
  21. {
  22.     int x;
  23.    class Local : public Interface
  24.     {
  25.    public:
  26.       Local(const T& obj, const P& arg)
  27.          : obj_(obj), arg_(arg)  {}
  28.       virtual void Fun()
  29.        {
  30.           x = 100;
  31.          obj_.Call(arg_);
  32.       }
  33.    private:
  34.       T obj_;
  35.       P arg_;
  36.    };
  37.    return new Local(obj, arg);
  38. }

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

 
 
 
  1.  class A
  2.    {
  3.    public:
  4.     class B
  5.      {
  6.     public:
  7.       …
  8.     private:
  9.       …
  10.     };
  11.     void f();
  12.     private:
  13.     int a;
  14.   }

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

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

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

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

 
 
 
  1. class A
  2.   {
  3.   public:
  4.     void f();
  5.   private:
  6.     int a;
  7.   };
  8.   class B
  9.   {
  10.     public:
  11.     …
  12.   private:
  13.     …
  14.   };

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

5、在C++嵌套類(lèi)中說(shuō)明的友元對(duì)外圍類(lèi)的成員沒(méi)有訪(fǎng)問(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)行定義。


網(wǎng)站題目:介紹C++局部類(lèi)和C++嵌套類(lèi)之間的區(qū)別
本文網(wǎng)址:http://www.5511xx.com/article/cojjscg.html