What are the reasons not to do this?
Say you've got to implement a series of objects that are practically identical, and will be arranged in a hierarchical order.  The depth of the hierarchy is defined before instantiation, by the user.

So, one way to do it would be to suppose that, in the worst-case, the user will only want to go to depth N, and write something like:

    class MyObject1
    {
      MyObject1 parent;
      MyObject1 children[];
    }
    
    class MyObject2 : public MyObject1
    {}
    
    class MyObject3 : public MyObject2
    {}
    
    (etc etc)

How many design patterns / best practices / coding guidelines does this violate?
What are the reasons not to do this?
===

Say you've got to implement a series of objects that are practically identical, and will be arranged in a hierarchical order.  The depth of the hierarchy is defined before instantiation, by the user.

So, one way to do it would be to suppose that, in the worst-case, the user will only want to go to depth N, and write something like:

    class MyObject1
    {
      MyObject1 parent;
      MyObject1 children[];
    }
    
    class MyObject2 : public MyObject1
    {}
    
    class MyObject3 : public MyObject2
    {}
    
    (etc etc)

How many design patterns / best practices / coding guidelines does this violate?