如果內部類只涉及它們的包含(或外部)類,它們將非常有用。
私人內部類的一個很好的例子是當你需要管理外部類中永遠不會被暴露的東西時。在下面的例子中,緩存管理器處理對象的緩存和非緩存。它使用私有的內部類來存儲指向它想要緩存的對象的指針,以及它最後訪問的時間。用戶這個假想的CacheManager不需要知道CacheEntry的代碼。
class CacheManager
{
private:
class CacheEntry
{
private:
Object* m_pObjectToCache;
int m_nTicksSinceTouched;
}; // eo class CacheEntry
std::map<int, CacheEntry*> m_Cache;
public:
Object* getObject(int _id);
}; // eo class CacheManager
然後是公共內部類的情況。我會用一個嵌套類,如果名字(我想保持簡單),我在其他地方發生衝突:
class Tree
{
public:
// public class.. Node might pertain to anything in the code, let's keep it simple
// and clear that THIS Node belongs and works with THIS Tree class.
class Node
{
};// eo class Node
}; // eo class Tree
那麼在這個例子中,你將如何使用Node?當我認爲公衆的時候,我想我能以某種方式在樹外訪問它,情況如此,或者Node是公開的事實導致它重寫另一個位於Tree之外的Node類? – pinkfloydx33 2010-11-03 12:32:19
是的,因爲它在樹外,它可以作爲「Tree :: Node」訪問,從而確保你得到你想要的節點。任何其他閱讀者都很清楚你的意思是哪個節點。 – 2010-11-03 12:39:18
在Tree中,我假設你不必指定你想要Tree :: Node與SomeOtherNS :: Node? – pinkfloydx33 2010-11-03 12:45:41