human* ptr creates a pointer to a human (or derived type), but does not create an instance of a human (or derived type). You will need tocan call the objects constructor like so:
1 2 3
human* ptr = new human();
// OR
human* ptr = new man();
Additionally, you will need to make the fun() method virtual so that the derived class can override it.
To call the function you should just use ptr->fun();
No, you don't need to create a new one. You can have the pointer point to an instance that already exists, like in the code I showed above.
You CAN (and then of course make you to delete it), but to use a pointer you can make a new one or make it point to an instance of that class you created earlier (which then of course you don't call delete on).