将一个类放在另一个类中的主要原因是避免使用仅在一个类中使用的内容来污染全局名称空间,因此不属于全局名称空间.这甚至适用于Python,全局命名空间是特定模块的命名空间.例如,如果您有SomeClass和OtherClass,并且它们都需要以专门的方式读取内容,那么最好使用SomeClass.Reader和OtherClass.Reader而不是SomeClassReader和OtherClassReader.
不过,我从未在C++中遇到过这种情况.从嵌套类控制对外部类字段的访问可能会有问题.在头文件中定义的编译单元中只有一个公共类以及CPP文件中定义的一些实用程序类(Qt库就是一个很好的例子)也很常见.这样它们对于"外人"是不可见的,这是好的,所以将它们包含在标题中没有多大意义.它还有助于增加二进制兼容性,否则这是一个难以维护的问题.嗯,无论如何,这是一种痛苦,但更不用说了.
嵌套类非常有用的语言的一个很好的例子是Java.嵌套类自动有一个指向创建它们的外部类的实例的指针(除非您将内部类声明为静态).这样您就不需要将"外部"传递给它们的构造函数,只需按名称来解析外部类的字段.
它允许您控制嵌套类的访问 - 例如,它通常用于实现细节类。在 C++ 中,它在解析各种事物的时间以及无需先声明即可访问的内容方面也具有优势。