程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第18章 特殊工具與技術(12)

第18章 特殊工具與技術(12)

編輯:C++入門知識

18.6 局部類

可以在函數體內部定義類,這樣的類稱為局部類(local class)。一個局部類定義了一個類型,該類型只在定義它的局部作用域中可見。與嵌套類不同,局部類的成員是嚴格受限的。

局部類的所有成員(包括函數)必須完全定義在類定義體內部。因此,局部類遠不如嵌套類有用。

類似地,不允許局部類聲明static數據成員,沒有辦法定義它們。

1. 局部類不能使用函數作用域中的變量

局部類可以訪問的外圍作用域中的名字是有限的。局部類只能訪問在外圍作用域中定義的類型名、static變量和枚舉成員,不能使用定義該類的函數中的變量。

[cpp] int a; 
class TheClass3{ 
public: 
    void foo(int c) 
    { 
        static int si; 
        enum Loc{e=1024,f}; 
        class Bar{ 
        public: 
            Loc locVal; 
            int barVal; 
            void fooBar(Loc i=e) 
            { 
                barVal=::a; 
                barVal=si; 
                barVal=f; 
            } 
        }; 
    } 
}; 
int a;
class TheClass3{
public:
 void foo(int c)
 {
  static int si;
  enum Loc{e=1024,f};
  class Bar{
  public:
   Loc locVal;
   int barVal;
   void fooBar(Loc i=e)
   {
    barVal=::a;
    barVal=si;
    barVal=f;
   }
  };
 }
};
2. 常規保護規則適用於局部類

外圍函數對局部類的私有成員沒有特殊訪問權,當然,局部類可以將外圍函數設為友元。

實際上,局部類中private成員幾乎是不必要的,通常局部類的所有成員都為public成員。

3. 局部類中的名字查找

4. 嵌套的局部類

可以將一個類嵌套在局部類內部。這種情況下,嵌套類定義可以出現在局部類定義體之外,但是,嵌套類必須在定義局部類的同一作用域中定義。通常,嵌套類的名字必須用外圍類的名字進行限定,並且嵌套類的聲明必須出現在局部類的定義中。

[cpp] class TheClass3{ 
public: 
    void foo() 
    { 
        class Bar{ 
            class NestedBar; 
        }; 
 
        class Bar::NestedBar{ 
        }; 
    } 
}; 

 

摘自 xufei96的專欄

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