局部類和嵌套類

來源:互聯網
上載者:User


  局部類

  在一個函數體內定義的類稱為局部類。局部類中只能使用它的外圍範圍中的對象和函數進行聯絡,因為外圍範圍中的變數與該局部類的對象無關。在定義局部類時需要注意:局部類中不能說明靜態成員函數,並且所有成員函數都必須定義在類體內。在實踐中,局部類是很少使用的。下面是一個局部類的例子。

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

  嵌套類

  在一個類中定義的類稱為嵌套類,定義嵌套類的類稱為外圍類。

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

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

  其中,類B是一個嵌套類,類A是外圍類,類B定義在類A的類體內。

  對嵌套類的若干說明:

  1、從範圍的角度看,嵌套類被隱藏在外圍類之中,該類名只能在外圍類中使用。如果在外圍類的範圍內使用該類名時,需要加名字限定。

  2、從存取權限的角度來看,嵌套類名與它的外圍類的對象成員名具有相同的存取權限規則。不能訪問嵌套類的對象中的私人成員函數,也不能對外圍類的私人部分中的嵌套類建立對象。

  3、嵌套類中的成員函數可以在它的類體外定義。

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

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

class B
{
 public:
  …
 private:
  …
};

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

  5、在嵌套類中說明的友元對外圍類的成員沒有訪問權。

  6、如果嵌套類比較複雜,可以只在外圍類中對嵌套類進行說明,關於嵌套的詳細的內容可在外圍類體外的檔案域中進行定義。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.