程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++ 局部類和嵌套類

C/C++ 局部類和嵌套類

編輯:C++入門知識

主要參考資料:C++編程思想和 高質量編程 以及網絡文章

局部類

局部類是指在函數中定義類。 (c++不能在函數中定義函數。c++在類中定義的函數也就是成員函數。)這個類以及由它創建的對象,都局限在該函數作用域中;必須在類內實現所有的成員函數,不能拿到類外。因為函數是不可以嵌套定義的;若類內含有靜態數據成員,必須在該函數外初始化;類內不可含有靜態函數成員;類中不可使用包裹它的函數所定義的除靜態外的局部變量。
c++內部類與java內部類最大的區別就是: c++的內部類對象沒有外部類對象的指針,不能訪問外部類對象的非靜態成員;java的非靜態內部類對象外部類對象的指針,訪問外部類對象的非靜態成員。

1 局部類Demo 示例

int a;
  void fun()
  {
  static int s;
  class A
  {
    public:
    void init(int i) { s = i; }
  };
  A m;
  m.init(10);
  }

2 局部類的另一個用途是用來實現類型轉化

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

template 
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);
}



.內嵌類

是在類體內定義的又一個類。外面的類叫外圍類。這個類以及由它創建的對象,都局限在外層類作用域中;

外界能否使用內層類,全在於訪問權限;若能使用,定要以外圍類::內層類格式來用;

是類組合演化的又一種類間關系,即組合或聚集成員不是產生於其它類,而是產生於內層類;內層類的成員函數,可以在類內實現,也可以在外層類之外實現;

內層類的成員函數對外圍類的成員沒有訪問權,反之亦然


定義嵌套類的目的在於隱藏類名,減少全局的標識符,從而限制用戶能否使用該類建立對象。這樣可以提高類的抽象能力,並且強調了兩個類(外圍類和嵌套類)之間的主從關系。


1 下面是一個嵌套類的例子

class A
  {
   public:
    class B
    {
    public:
      …
    private:
      …
    };
    void f();
    private:
    int a;
  }
其中,類B是一個嵌套類,類A是外圍類,類B定義在類A的類體內。

2 對嵌套類的若干說明:


1、從作用域的角度看,嵌套類被隱藏在外圍類之中,該類名只能在外圍類中使用。如果在外圍類的作用域內使用該類名時,需要加名字限定。
2、從訪問權限的角度來看,嵌套類名與它的外圍類的對象成員名具有相同的訪問權限規則。不能訪問嵌套類的對象中的私有成員函數,也不能對外圍類的私有部分中的嵌套類建立對象。
3、嵌套類中的成員函數可以在它的類體外定義。
4、嵌套類中說明的成員不是外圍類中對象的成員,反之亦然。嵌套類的成員函數對外圍類的成員沒有訪問權,反之亦然。國此,在分析嵌套類與外圍類的成員訪問關系時,往往把嵌套類看作非嵌套類來處理。

上述的嵌套類可寫成如下格式:
class A
  {
  public:
    void f();
  private:
    int a;
  };

    class B
  {
    public:
    …
  private:
    …
  };

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

5、在嵌套類中說明的友元對外圍類的成員沒有訪問權。
6、如果嵌套類比較復雜,可以只在外圍類中對嵌套類進行說明,關於嵌套的詳細的內容可在外圍類體外的文件域中進行定義。







  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved