I have many abstract classes that describe many abstract ideas and objects. These classes have many complex relationships with each other, and I realize that while writing code with some of the derived classes can get confusing. For example, it isn't completely clear at first glance if class `C` is derived from class `A`, or if it derives from class `B`.

This is just an example and doesn't relate to the actual application:

These four classes describe 4 different types of vehicles,

- Ground

- Air

- Water

- Space

Now I'm hoping to declaring my derived classes inside the base class so I can specify the class by doing this:

```cpp
class Ground {
    class HondaAccord;
}

// Now I know that HondaAccord is for certain a ground vehicle
Ground::HondaAccord car();
```

While for something as simple as this it's not really worth the increased clutter, In my opinion it makes it clearer and explicit in my specific codebase. Plus I could declare the derived classes here and defining the functions elsewhere so I wouldn't need to import a **HondaAccord.h** or anything when using the `HondaAccord` class.

It is my understanding that the nested class is effectively the same as a normal class. I was hoping to get more information from more experienced people to understand if there are potential issues down the line that I'm not seeing.

Thanks