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

介紹C++局部類和C++嵌套類之間的區別

編輯:C++入門知識

如果嵌套類型和其外部類型之間的關系需要成員可訪問性語義,需要使用C++嵌套類,嵌套類型不應針對其聲明類型以外的類型執行任務,而C++局部類允許類、結構和接口被分成多個小塊兒並存儲在不同的源文件中,這樣的實現很容易開發和維護。

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

  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. 局部類的另一個用途是用來實現類型轉化,如下代碼:  
  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++嵌套類,定義嵌套類的類稱為外圍類。定義嵌套類的目的在於隱藏類名,減少全局的標識符,從而限制用戶能否使用該類建立對象。這樣可以提高類的抽象能力,並且強調了兩個類(外圍類和嵌套類)之間的主從關系。下面是一個嵌套類的例子:

  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;  


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

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

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

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

  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++嵌套類中說明的友元對外圍類的成員沒有訪問權。

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

  1. C與C++中標准輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

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