The problem is more than just passing everyone the right arguments,
it is also the case that some hiearchies want to do it bottom-up
while other perfectly reasonable hierarchies want to do it top-down.
I wouldn't look to C++ as a role model for this! Check out Flavors
(an OO Lisp dialect) or other dynamic OO languages for better approaches.