Your array is an array of Enemy objects. When you're trying to add an element of type ScaryBoi, what you're really doing is crating an element of type Enemy - because that's what your vector is - and setting its values to be a copy of the Enemy parts of your ScaryBoi object. It's the equivalent of doing:
1 2 3 4
Enemy vector_element = my_object;
vector_element.sayHy(); // This is an Enemy, so prints "Hy".
This is called object slicing.
If you want to use polymorphism, you need to use pointers to the base class, rather than base class objects:
1 2 3 4 5
Enemy* vector_element = &my_object;
vector_element->sayHy(); // Polymorphism allows this to be treated as a ScaryBoi, so prints "Hello there".