C++ inheritance and derivation mechanism