Внутренние классы очень полезны, если они относятся только к их содержащему (или внешнему) классу.
Хороший пример частного внутреннего класса - это когда вам нужно управлять чем-то внутри внешнего класса, которое никогда не будет выставлено. В приведенном ниже примере менеджер кэширования обрабатывает и кэширует объекты. Он использует закрытый внутренний класс для хранения указателя на объект, который он хочет кешировать, а также времени последнего обращения к нему. Код, который использует этот гипотетический 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