自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

介紹C++局部類和C++嵌套類之間的區(qū)別

開發(fā) 后端
C++局部類:在C# 1.x中,要求類中所有的代碼必須集中在一起,放在一個文件夾中,C++嵌套類:在另一個類型的范圍內(nèi)定義的類型。嵌套類型通常用于封裝頂級類型的實現(xiàn)細(xì)節(jié),下面說一下他們之間的區(qū)別。

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

C++局部類
在一個函數(shù)體內(nèi)定義的類稱為局部類。局部類中只能使用它的外圍作用域中的對象和函數(shù)進(jìn)行聯(lián)系,因為外圍作用域中的變量與該局部類的對象無關(guān)。局部類不能被外部所繼承。在定義局部類時需要注意:局部類中不能說明靜態(tài)成員函數(shù),并且所有成員函數(shù)都必須定義在類體內(nè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.  
  14.  
  15. 局部類的另一個用途是用來實現(xiàn)類型轉(zhuǎn)化,如下代碼:  
  16.  
  17. class Interface  
  18. {  
  19. public:  
  20.    virtual void Fun() = 0;    
  21. };  
  22.  
  23. template <class T, class P> 
  24. Interface* MakeAdapter(const T& obj, const P& arg)  
  25. {  
  26.     int x;  
  27.    class Local : public Interface  
  28.     {  
  29.    public:  
  30.       Local(const T& obj, const P& arg)  
  31.          : obj_(obj), arg_(arg)  {}  
  32.       virtual void Fun()  
  33.        {  
  34.           x = 100;  
  35.          obj_.Call(arg_);  
  36.       }  
  37.    private:  
  38.       T obj_;  
  39.       P arg_;  
  40.    };  
  41.    return new Local(obj, arg);  

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

  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.   } 


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

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

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

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

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

由引可見,嵌套類僅僅是語法上的嵌入。

5、在C++嵌套類中說明的友元對外圍類的成員沒有訪問權(quán)。

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

【編輯推薦】

  1. C與C++中標(biāo)準(zhǔn)輸入實現(xiàn)方式上的一點區(qū)別
  2. C++編譯器如何對Const常量進(jìn)行分配存儲空間
  3. C++類庫設(shè)計的基本構(gòu)思與方法
  4. 玩轉(zhuǎn)C++語言的幾種方法
  5. 如何更好的進(jìn)行C++代碼編制
責(zé)任編輯:chenqingxiang 來源: NET130
相關(guān)推薦

2011-06-21 15:00:07

JAVAC++

2011-07-13 18:00:51

CC++VC

2010-01-15 18:35:25

C++的類

2009-08-18 17:17:05

C#局部類型

2011-04-11 09:43:25

C++C

2023-09-04 11:00:54

CC++語言

2010-01-21 13:33:44

C++基類

2022-07-01 11:56:54

C語言C++編程語言

2010-01-25 15:55:50

托管C++

2016-12-20 16:35:52

NodeJSC++類型轉(zhuǎn)換

2016-12-07 11:23:52

NodeJSC++

2020-06-17 12:22:44

C覆蓋重載

2011-04-06 08:57:07

C++java多態(tài)

2010-01-15 15:52:18

CC++

2010-01-15 10:41:06

CC++

2010-01-28 13:27:12

C++類定義

2009-10-22 09:17:16

C++ CLR

2010-01-19 18:35:12

靜態(tài)成員

2010-02-01 17:31:06

C++類成員

2010-01-19 18:51:17

C++類
點贊
收藏

51CTO技術(shù)棧公眾號