如果内部类只涉及它们的包含(或外部)类,它们将非常有用。
私人内部类的一个很好的例子是当你需要管理外部类中永远不会被暴露的东西时。在下面的例子中,缓存管理器处理对象的缓存和非缓存。它使用私有的内部类来存储指向它想要缓存的对象的指针,以及它最后访问的时间。用户这个假想的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