先看看什麼是前向宣告。在c++中,類需要先定義,而後才能被例項化,但是實際存在一種場景是:兩個類需要相互引用或相互成為類中的子物件成員時,就無法先定義使用,在編譯環節就出現錯誤導致編譯失敗,這時就需要用到前向宣告,此外,前向宣告的類不能被例項化。下面是例子:
//此段**在a.h檔案中
#ifndef _a_h
#define _a_h
#include "b.h"
class a
;#endif
//下面**在b.h檔案中
#ifndef _b_h
#define _b_h
/*b類包含a類物件,a類又包含b類物件時,標頭檔案也互相包含,這是不允許的,需要前向宣告:
在b.h中將a類前向宣告,此時就不再需要包含a.h標頭檔案,且b中不能有a類的物件,因為前向宣告的類不能被例項化,但是可以是a類的指標或者引用*/
//#include "a.h"
class a;
class b
};#endif
巢狀類顧名思義,巢狀類就是在類體中再定義另外乙個類,形成類中類的情況。我們將最外層定義的類稱為外圍類,外圍類內部再定義的類稱為巢狀類。巢狀類的主要作用是為外圍類提供服務的,外圍類可以使用巢狀類物件作為外圍類的底層實現,同時可以對使用者隱藏該底層的實現。
巢狀類需要注意的幾點:
(1) 作用域上,巢狀類是定義在外圍類內部的,所以該類名只能在外圍類內部使用,如果在外圍類外部使用該類名時,需要加名字限定,如out::inner i;
(2) 巢狀類中的成員函式可以在它的外部定義。
(3) 巢狀類的成員函式對外圍類的資料成員沒有訪問權,反之亦然。因為巢狀類僅僅是語法上的嵌入,它與外圍類實際上是平級的。
下面是巢狀類的簡單例子:
class outer //外圍類
//static int b_; //error,區域性類不能定義static靜態資料成員.
};localclass lc;
lc.init(10);
}int main()
04 前向宣告 巢狀類 區域性類
一 類的前向宣告 有種特殊情況,當兩個類需要相互引用形成乙個 環形 引用時,無法先定義使用。這時候需要用到前向申明,但是前向申明的類不能例項化。下面的三個圖展現了前向宣告的用法和注意的事項 1 class a 即前向宣告了這個a類,此時a類被宣告而沒有被定義 這種時候稱之為前向宣告 在宣告之後,定義...
C 區域性類和巢狀類
如果巢狀型別和其外部型別之間的關係需要成員可訪問性語義,需要使用c 巢狀類,巢狀型別不應針對其宣告型別以外的型別執行任務,而c 區域性類允許類 結構和介面被分成多個小塊兒並儲存在不同的原始檔中,這樣的實現很容易開發和維護。c 區域性類 在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作...
區域性類和巢狀類
區域性類在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作用域中的物件和函式進行聯絡,因為外圍作用域中的變數與該局部類的物件無關。在定義區域性類時需要注意 區域性類中不能說明靜態成員函式,並且所有成員函式都必須定義在類體內。在實踐中,區域性類是很少使用的。下面是乙個區域性類的例子。in...