嵌套類型

嵌套類型 嵌套類型是作為某其他類型的成員的類型。 不要將嵌套類型定義為接口的成員。

簡介

嵌套類型 (nested type)在另一個類型的範圍內定義的類型。嵌套類型通常用於封裝頂級類型的實現細節。

提示

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

相關詞條

熱門詞條

聯絡我們