И так. Фейки, лонги, заржи и т.д. и т.п. молчим. Для новичков, а может даже для тех кто не сразу разберет код. Задача: разобраться в работе кода и МАКСИМАЛЬНО его упростить сохраняя определения классов. #include <iostream> class Base; class Inherit { public: Base * SomeFunc( ); void Say( ) { std :: cout << "Inherit say..." << std :: endl; } }; class Base { public: void Func( Inherit * pInh ); void Say( ) { std :: cout << "Base say..." << std :: endl; } }; Base * Inherit :: SomeFunc( ) { Base *pBase = new Base; pBase->Func( this ); return pBase; } void Base :: Func( Inherit *pInh ) { pInh->Say( ); } int main( ) { Inherit *pInh = new Inherit; Base *pBase; pBase = pInh->SomeFunc( ); pBase->Say( ); delete pBase; delete pInh; return 0; }