имеется:
class Assignable; // находится в .so'шке, которая цепляется к бинарнику в процессе загрузки
class AssignableRawSocket : public Assignable; // находится в .so'шке которая подгружается dlopen'ом и регистрирует себя в map'е
virtual Assignable::init(std::string str); // инициализация родительского класса
virtual AssignableRawSocket::init(std::string str); // инициализация дочернего
Assignable * AssignableFactory::createObject();
AssignableRawSocket * a;
Assignable * a1;
AssignableFactory * f;
f = AssignableFactory::getFactoryByName(proto); // получаем одну из загруженых dlopen'ом фабрику
a = dynamic_cast<AssignableRawSocket *>(f->createObject()); // создаем дочерний объект, возвращаем указатель и неявно преобразуем к родительскому. Динамик кастим обратно - для наглядности
a1 = a; // опять неявно преобразуем
a->init(assignPath); // вызывается AssignableRawSocket::init() // вызывается дочерний init
a1->init(assignPath); // вызывается Assignable::init() // вызывается родительский init