Mayor, Это уже не полиморфизм, а переопределение функции. Следовательно у тебя будет работать метод родительского класса. 
мне не нужно переопределение функции:
под переопределением функции понимается выбор компилятором вызываемой функции в соответствии  с передаваемым аргументом
мне нужно, что-то типа виртуального конструктора:
функция которая будет менять тип аргументов и результатов в зависимости от того какому классу принадлежит объект ее содержащий:
struct B : public A {};
pa f=f_factory(string("B"));
//тип f->ff  B*(*pb::ff)(B*);
f=f_factory(string("A"));
//тип f->ff  A*(*pa::ff)(A*);