When you do this:
Ninja n;
you allocate the Ninja on the stack and this
Enemy * enemy = &n;
gets a pointer to that location. Once you leave the current function, the memory in the stack is reused and your Ninja* will be dangling: if you try to access it (dereference) your program will crash or worse.
When you do this:
Enemy * enemy = new Ninja;
you allocate a new Ninja object on the heap. You can continue yo use your Ninja instance until you free the memory with
delete enemy;
Check out the answers to this question to get a better idea of stack vs heap allocation.