hierarchical inheritance in c++