嵌套類型是作為某其他類型的成員的類型。嵌套類型應與其聲明類型緊密關聯,並且不得用作通用類型。有些開發人員會將嵌套類型弄混淆,因此嵌套類型不應是公開可見的,除非不得不這樣做。在設計完善的庫中,開發人員幾乎不需要使用嵌套類型實例化對象或聲明
變數。
在聲明類型使用和創建嵌套類型實例時,嵌套類型很有用,但不在公共成員中公開嵌套類型的使用。
如果嵌套類型和其外部類型之間的關係需要成員可訪問性語義,則要使用嵌套類型。由於嵌套類型被視為是聲明類型的成員,因此嵌套類型可以訪問聲明類型中的所有其他成員。
不要將公共嵌套類型用作邏輯分組構造;請改用命名空間。
避免公開顯露嵌套類型。唯一的特例是需要聲明嵌套類型的變數的情況,在生成子類或其他高級自定義等極少數情況下需要聲明嵌套類型的變數。
如果可能在聲明類型的外部
引用類型,則不要使用嵌套類型。在常見方案中,不應要求對嵌套類型進行
變數聲明和對象實例化。例如,處理在某一類上定義的事件的事件處理程式委託不應嵌套在該類中。
如果需要由客戶端代碼實例化類型,則不要使用嵌套類型。如果某種類型具有公共
構造函式,就可能不應進行嵌套。理想情況下,嵌套類型僅由它的聲明類型進行實例化和使用。如果嵌套類型具有公共
構造函式,則表示該類型不單由其聲明類型使用。通常情況下,嵌套類型不應針對其聲明類型以外的類型執行任務。如某種類型具有更廣泛的用途,就很可能不應進行嵌套。
不要將嵌套類型定義為接口的成員。許多語言不支持這樣的構造。C++示例:
將某個類的定義放在另一個類的內部,這樣的類定義,叫嵌套類
classA{public://嵌套類的可訪問性取決於是public還是protected或者private,嵌套類不能使用對象訪問。//嵌套類不是數據成員。classB{public:intdata;friendclassA;voidshow(){}};private://類外不可訪問classC{intdata;friendclassB;voidshow(){}};voidfunc()//B,C都可以訪問。{Btest1;Ctest2;}};intmain(intargc,charconst*argv[]){//不能訪問CA::Bt;return0;}this::B::b;//作用域訪問嵌套類的方式,b應該是一個靜態數據成員。pb->b;//在封裝類定義嵌套類的指針,也可以訪問friendA;//私有時定義為友元也可以訪問對像的訪問:aa.pb->showB();//指針群20072918